タスクスケジューラ連携:エラー時に通知(メール送信・イベントログ記録)拡張版
タスクスケジューラで 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 でイベントログ記録
- エラー処理に組み込むことで、タスクスケジューラ実行時の障害を確実に検知できる


