[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]
『Outlookでの自動送信マクロ エクセルでの課題管理における自動送信』(見習い)
「期限超過した課題を担当者にOutlookでメールを送る」という課題です。
エクセルに記載されている(キーID、種別、件名、状態、期限日)を抽出し、HTML表にしてメールに添付します。
悩んでいるのは以下の点です。
期限超過の課題がない担当者には、
?@メールを立ち上げない
?A送信しない
を実行したいのですが、やり方がわかりません。
以下のマクロの状態だと
?@期限超過の課題がない担当者もメールが立ち上がる
?A表のヘッダーが作成される
?B宛先も入力され、送信される
改善したいです。
お助けくださいよろしくお願いいたします。
Dim objOutlook As Outlook.Application Set objOutlook = New Outlook.Application Dim objMail As Outlook.MailItem 'Set objMail = objOutlook.CreateItem(olMailItem)
'--- Excelワークシート ---' Dim ws As Worksheet Set ws = ThisWorkbook.Worksheets("データ") Dim ws2 As Worksheet Set ws2 = ThisWorkbook.Worksheets("担当者")
MsgBox Date
'--- メールの内容を格納する変数 ---' Dim toStr As String Dim ccStr As String Dim bccStr As String Dim subjectStr As String Dim bodyStr As String Dim tanto_id As Long Dim tanto_name As String Dim i As Integer Dim j As Integer Dim keyID As Integer Dim kigenbi As Date Dim keyStr As String Dim kigenStr As String
subjectStr = "【要確認】期限超過課題対応のお願い" For i = 2 To Cells(Rows.Count, 1).End(xlUp).Row Set objMail = objOutlook.CreateItem(olMailItem) tanto_id = ws2.Cells(i, 1) tanto_name = ws2.Cells(i, 2) toStr = ws2.Cells(i, 3)
bodyStr = tanto_name & "様" & "<br>" & "<br>" & "Backlogにおけるご担当の課題の期限が超過しております。" & "<br>" & _ "チケットの更新、または期限の延伸をお願いいたします。" bodyStr = bodyStr + "<html><body><table border=1>" bodyStr = bodyStr + "<tr bgcolor =#191970><th>キーID</th><th>種別</th><th>件名</th><th>状態</th><th>期限日</th></tr>" For j = 2 To Cells(Rows.Count, 1).End(xlUp).Row If (Cells(j, 22) = tanto_id) Then keyID = Cells(j, 4) kigenbi = Cells(j, 29) If kigenbi < Date Then keyStr = Str(keyID) kigenStr = Str(kigenbi)
bodyStr = bodyStr + "<tr style=color:red><td>" bodyStr = bodyStr + keyStr bodyStr = bodyStr + "</td><td>" bodyStr = bodyStr + Cells(j, 7) bodyStr = bodyStr + "</td><td>" bodyStr = bodyStr + Cells(j, 12) bodyStr = bodyStr + "</td><td>" bodyStr = bodyStr + Cells(j, 15) bodyStr = bodyStr + "</td><td>" bodyStr = bodyStr + kigenStr bodyStr = bodyStr + "</td></tr>" End If
End If Next j bodyStr = bodyStr + "</table></body></html>"
objMail.Display objMail.To = toStr objMail.Subject = subjectStr objMail.HTMLBody = bodyStr Next i
objMail.Send
End Sub
< 使用 Excel:unknown、使用 OS:unknown >
ぱっと見、セルを参照する際にシートを明記しているところと、省略しているところがありますね。 どのシートがアクティブなのかで結果が変わってしまうので、ちゃんと全て明記しては? 手抜きのせいで不具合発生しているだけだと、格好悪過ぎますから。
そして、思った通りに動かないならば、ステップ実行して、参照している内容や変数の内容が想定通りになっているか確認し、間違い箇所を探しましょう。
なんか、要らない変数代入が多いし、プログラミング経験の無い新入社員に出された、マクロを作る練習課題なのでしょうか? 課題なら、出題した人に聞くのが適切ですよ。 第3者だと、シート上のどのセルにどんな文字列が記入されているか判らないので、デバッグは手伝えませんからね。
(???) 2020/06/18(木) 11:31
ステップ実行すれば、自分で気付くと思います。 または、いきなりコーディングせず、フローチャートを書いてみるべきですね。
先に期限判定して、期限切れの場合のみ、メール作成し送信する、というように組み直しましょう。 無駄な変数が多い事や、インデントを雑にしている事で、可読性が悪くなって、簡単な原因でも気づかないのですよ。
(???) 2020/06/18(木) 11:49
>先に期限判定して、期限切れの場合のみ、メール作成し送信する、というように組み直しましょう。 無駄な変数が多い事や、インデントを雑にしている事で、可読性が悪くなって、簡単な原因でも気づかないのですよ。
かしこまりました。
処理フローは書いているので、見直しながら丁寧に確認していきたいと思います。
(見習い) 2020/06/18(木) 12:12
[ 一覧(最新更新順) ]
YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki.
Modified by kazu.