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

Excel VBA VBA
スポンサーリンク

タスクスケジューラ連携:エラー時に通知(メール送信・イベントログ記録)拡張版

タスクスケジューラで Excel VBA を自動実行する場合、エラーが発生したときに通知できると安心です。ここでは「メール送信」と「Windowsイベントログ記録」の拡張版を紹介します。


1. エラー時にメール送信(CDO.Messageを利用)

VBAから直接メールを送るには CDO.Message を使います。SMTPサーバーが必要ですが、社内メールサーバーや外部SMTP(例:Office365, Gmail)を設定すれば利用可能です。

Option Explicit

'=== エラー通知メール送信 ===
Sub SendErrorMail(errMsg As String)
    Dim objMsg As Object
    Dim objConf As Object
    Dim fields As Variant
    
    Set objMsg = CreateObject("CDO.Message")
    Set objConf = CreateObject("CDO.Configuration")
    
    ' SMTP設定(例:Office365)
    objConf.Fields.Item("http://schemas.microsoft.com/cdo/configuration/sendusing") = 2
    objConf.Fields.Item("http://schemas.microsoft.com/cdo/configuration/smtpserver") = "smtp.office365.com"
    objConf.Fields.Item("http://schemas.microsoft.com/cdo/configuration/smtpserverport") = 587
    objConf.Fields.Item("http://schemas.microsoft.com/cdo/configuration/smtpusessl") = True
    objConf.Fields.Item("http://schemas.microsoft.com/cdo/configuration/smtpauthenticate") = 1
    objConf.Fields.Item("http://schemas.microsoft.com/cdo/configuration/sendusername") = "your_account@domain.com"
    objConf.Fields.Item("http://schemas.microsoft.com/cdo/configuration/sendpassword") = "your_password"
    objConf.Fields.Update
    
    With objMsg
        Set .Configuration = objConf
        .From = "your_account@domain.com"
        .To = "admin@domain.com"
        .Subject = "【VBAタスクエラー通知】"
        .TextBody = "エラーが発生しました: " & vbCrLf & errMsg
        .Send
    End With
End Sub
VB

👉 エラー時に SendErrorMail Err.Description を呼び出せば管理者に通知可能です。


2. Windowsイベントログに記録

Windowsのイベントビューアに直接ログを書き込むことで、監視ツールや運用チームが検知できます。

'=== エラーをイベントログに記録 ===
Sub WriteErrorEvent(errMsg As String)
    Dim wsh As Object
    Set wsh = CreateObject("WScript.Shell")
    
    ' Applicationログにエラーを書き込み
    wsh.LogEvent 1, "VBAタスクエラー: " & errMsg
End Sub
VB

👉 LogEvent の第一引数はイベント種別:

  • 0 = 成功
  • 1 = エラー
  • 2 = 警告
  • 4 = 情報

3. エラー処理統合例

Sub AutoRun()
    On Error GoTo ErrHandler
    
    ' ▼業務処理
    Range("A1").Value = "Hello VBA!"
    
    Exit Sub
    
ErrHandler:
    Dim errMsg As String
    errMsg = "ErrNumber: " & Err.Number & " / " & Err.Description
    
    ' ログ出力
    WriteLogMonthly "エラー発生: " & errMsg
    
    ' メール通知
    SendErrorMail errMsg
    
    ' イベントログ記録
    WriteErrorEvent errMsg
End Sub
VB

実務でのメリット

  • メール通知 → 管理者が即座にエラーを把握できる
  • イベントログ記録 → 運用監視ツールと連携可能
  • 二重の仕組み → 見逃しを防止

✅ まとめ

  • CDO.Message でメール送信
  • WScript.Shell.LogEvent でイベントログ記録
  • エラー処理に組み込むことで、タスクスケジューラ実行時の障害を確実に検知できる
タイトルとURLをコピーしました