Excel VBA | 実務用 VBA コード集(テンプレ付き)

Excel VBA VBA
スポンサーリンク

VBA 通知メール拡張版(HTMLメールにグラフやアイコン画像を埋め込む)

テキストや表だけでなく、グラフやアイコン画像をHTMLメールに埋め込むと、通知がさらに視覚的に分かりやすくなります。ここでは「CDO.Message」を使った HTMLメール+画像埋め込み のサンプルを紹介します。


基本の考え方

  • HTMLメール本文<img> タグを使う
  • 画像は以下の方法で埋め込み可能
    1. 外部URL参照(例:Web上のアイコン画像)
    2. 添付ファイルを本文に埋め込み(Content-IDを利用)

外部URL参照版(簡易)

Sub SendSuccessMailHTMLWithIcon(successMsg As String)
    Dim objMsg As Object
    Dim objConf As Object
    
    Set objMsg = CreateObject("CDO.Message")
    Set objConf = CreateObject("CDO.Configuration")
    
    ' SMTP設定(例:Office365)
    With objConf.Fields
        .Item("http://schemas.microsoft.com/cdo/configuration/sendusing") = 2
        .Item("http://schemas.microsoft.com/cdo/configuration/smtpserver") = "smtp.office365.com"
        .Item("http://schemas.microsoft.com/cdo/configuration/smtpserverport") = 587
        .Item("http://schemas.microsoft.com/cdo/configuration/smtpusessl") = True
        .Item("http://schemas.microsoft.com/cdo/configuration/smtpauthenticate") = 1
        .Item("http://schemas.microsoft.com/cdo/configuration/sendusername") = "your_account@domain.com"
        .Item("http://schemas.microsoft.com/cdo/configuration/sendpassword") = "your_password"
        .Update
    End With
    
    With objMsg
        Set .Configuration = objConf
        .From = "your_account@domain.com"
        .To = "admin@domain.com"
        .Subject = "【VBAタスク成功通知】"
        
        ' HTML本文(外部アイコン画像を利用)
        .HTMLBody = _
            "<html><body>" & _
            "<h2 style='color:green;'>✅ VBAタスク成功通知</h2>" & _
            "<p><img src='https://upload.wikimedia.org/wikipedia/commons/thumb/5/50/Yes_Check_Circle.svg/120px-Yes_Check_Circle.svg.png' width='40' height='40'></p>" & _
            "<p><b>処理が正常終了しました。</b></p>" & _
            "<table border='1' cellpadding='5' style='border-collapse:collapse;'>" & _
            "<tr><th>日時</th><td>" & Format(Now, "yyyy/mm/dd hh:nn:ss") & "</td></tr>" & _
            "<tr><th>詳細</th><td>" & successMsg & "</td></tr>" & _
            "</table>" & _
            "</body></html>"
        
        .Send
    End With
End Sub
VB

👉 外部URLを参照するので簡単ですが、受信環境によっては画像がブロックされる場合があります。


添付ファイルを本文に埋め込む版(Content-ID利用)

Sub SendErrorMailHTMLWithIcon(errMsg As String)
    Dim objMsg As Object
    Dim objConf As Object
    
    Set objMsg = CreateObject("CDO.Message")
    Set objConf = CreateObject("CDO.Configuration")
    
    ' SMTP設定(同上)
    With objConf.Fields
        .Item("http://schemas.microsoft.com/cdo/configuration/sendusing") = 2
        .Item("http://schemas.microsoft.com/cdo/configuration/smtpserver") = "smtp.office365.com"
        .Item("http://schemas.microsoft.com/cdo/configuration/smtpserverport") = 587
        .Item("http://schemas.microsoft.com/cdo/configuration/smtpusessl") = True
        .Item("http://schemas.microsoft.com/cdo/configuration/smtpauthenticate") = 1
        .Item("http://schemas.microsoft.com/cdo/configuration/sendusername") = "your_account@domain.com"
        .Item("http://schemas.microsoft.com/cdo/configuration/sendpassword") = "your_password"
        .Update
    End With
    
    With objMsg
        Set .Configuration = objConf
        .From = "your_account@domain.com"
        .To = "admin@domain.com"
        .Subject = "【VBAタスクエラー通知】"
        
        ' 添付ファイルを本文に埋め込み(例:error.png)
        objMsg.AddAttachment "C:\Scripts\error.png"
        
        ' HTML本文(添付画像を Content-ID で参照)
        .HTMLBody = _
            "<html><body>" & _
            "<h2 style='color:red;'>❌ VBAタスクエラー通知</h2>" & _
            "<p><img src='cid:error.png'></p>" & _
            "<p><b>エラーが発生しました。</b></p>" & _
            "<table border='1' cellpadding='5' style='border-collapse:collapse;'>" & _
            "<tr><th>日時</th><td>" & Format(Now, "yyyy/mm/dd hh:nn:ss") & "</td></tr>" & _
            "<tr><th>エラー詳細</th><td>" & errMsg & "</td></tr>" & _
            "</table>" & _
            "</body></html>"
        
        .Send
    End With
End Sub
VB

👉 添付ファイルを本文に埋め込むので、受信側で確実に表示されます。


実務でのメリット

  • アイコン画像で成功/失敗を直感的に把握
  • グラフや図を埋め込めば進捗や統計も一目で分かる
  • HTMLメール+画像埋め込みで通知が「見やすく・分かりやすく」なる

✅ まとめ

  • 外部URL参照 → 簡単だが環境依存あり
  • 添付ファイル埋め込み → 確実に表示される
  • 成功/失敗通知をアイコンやグラフで強調できる
タイトルとURLをコピーしました