##はじめに
ExcelVBAを使用し、
GoogleChromeにて特定サイトへ定期的にアクセス確認し、アクセス不可時にエラーメールを自動送信する方法
を備忘メモに残す。
運用保守にて役立つシチュエーションが想定できる。
例えば、ある特定のサイトにアクセス不安定状態なインシデント発生直後、解決したとしても、
エンドユーザからは、いつ再発するか分からないので適宜監視するように求められることもある。
そういったとき、担当者にて手動でそのサイトに1分に1回ペースでアクセス確認するような対処でも良いが、自動化しておく方がよいだろう。
※実際以前にこういったインシデントが発生した。この仕組みをすぐに作れれば良かったのだが・・・
ということで、休日割いて勉強したので記録しておく、
##大まかな流れ
<事前準備>
1:ExcelVBAにてGoogleChromeへアクセス出来るように準備
2:ExcelVBAにてOutlookでメール送信できるように準備
<スクリプト準備/設定>
3:「GoogleChromeにて特定サイトへアクセス確認しアクセス不可時のエラーメールを自動送信」内容をVBE内に書く
4:タスクスケジューラの設定(Windows)
##1:ExcelVBAにてGoogleChromeへアクセス出来るように準備
今回はよく使用されているブラウザ「GoogleChrome」にて設定する
ExcelVBAでGoogleChromeを使用するには設定が必要だが、設定方法は過去の記事を参照のほど。
https://qiita.com/oyamasan_tec/items/462769494ed4c7ebad9a
##2:ExcelVBAにてOutlookでメール送信できるように準備
今回はよく使用されているブラウザ「Outlook」にて設定する
ExcelVBAでOutlookを使用するには設定が必要だが、設定方法は過去の記事を参照のほど。
https://qiita.com/oyamasan_tec/items/462769494ed4c7ebad9a
##3:「GoogleChromeにて特定サイトへアクセス確認しアクセス不可時のエラーメール自動送信」内容をVBE内に書く
Excel新規で開き、以下をコピペし、保存して閉じておく
'Auto_Open()を使用することでExcelブックを起動直後にVBA自動実行
Sub Auto_Open()
'ここではブラウザオブジェクトを生成
Dim Driver As New Selenium.WebDriver
Dim title As String
Driver.Start "chrome" '←クロームを起動
On Error Resume Next '←下記URLに接続不可の場合でも処理を実行
Driver.Get "https://hogehogehogehogehogehoge.co.jp/" '←今回は敢えて存在しないURLを指定
title = Driver.title '←そのURL先のタイトルを取得
'URL先のタイトルが一致しているか判定
'一致しない場合はエラーメール送信プロシージャの呼び出し
If title = "Yahoo! JAPAN" Then
Driver.Close
Else
outlook_mailsend
Driver.Close
End If
Application.Quit
End Sub
'エラーメール送信プロシージャ
Sub outlook_mailsend()
'Outlookオブジェクト生成
Dim objOutlook As Outlook.Application
Dim objMail As Outlook.MailItem
Set objOutlook = New Outlook.Application
Set objMail = objOutlook.CreateItem(olMailItem)
'各種設定
With objMail
.To = "xxx@xxx.com" 'メール宛先
.Subject = "エラーメール" 'メール件名
.Body = "エラー" & vbCr & "です。" 'メール本文
.BodyFormat = olFormatPlain 'メールの形式
.Send
End With
End Sub
##4:タスクスケジューラの設定(Windows)
Windows環境を使用している運用保守ならば、タスクスケジューラ設定をご存じだと思うので割愛。
上記スクリプトが記載された「xxxxxx.xlsm」をタスクスケジューラにて自動実行するように設定する。
例えば、1分毎に「xxxxxx.xlsm」を自動実行するように設定した場合、
1分毎に特定のサイトにアクセスし、正常にアクセス出来なかった場合は運用保守担当宛、またはお客様宛にメールをするように自動化できるだろう。
もちろん正常にアクセス出来た場合は、何も起こらない。
##補足1
なお今回はブラウザ「Chrome」、メーラ「Outlook」を指定したが、
おそらく「IE」や「Thunderbird」だけでなく、Webメール「gmail」でも可能そう。
##補足2
今回のように、
ブックを開いたときに自動実行される「Sub Auto_Open()」と
処理終了後に自動でブックを閉じる「Application.Quit」を設定していると、
今後、本VBAを編集しようとしても、開けば勝手に閉じられるように組んでしまっているので、
さて、困ったことになる。
その時の対処方法を下記にて記載する。
1:他のExcelブックを開く
2:そのブックで下記コードを記載し、実行
Sub Sample()
Application.EnableEvents = False
Workbooks.Open Filename:="C:\Users\【上記スクリプトが記載されたxlsmファイル】"
Application.EnableEvents = True
End Sub
これで救済