みなさん、こんにちは!
タカハシ(@ntakahashi0505)です。
エクセルVBAでHTTP通信を行う方法についてあれこれお伝えしています。
前回はこちらの記事でした。
エクセルVBAからHTTPリクエストをチャットワークに送って、メッセージを送信する方法についてお伝えしました。
紹介した方法は、「テスト」といったシンプルなメッセージを送るのみでしたので、エクセルVBAからチャットワークにメッセージ…具体的にどんな時に使いますかね?
ということで、今回は一つ便利な使用例として、マクロの実行完了についてチャットワークへの通知してお知らせする方法についてお伝えします。
では、行ってみましょう!
前回のおさらい
では、まずは前回のおさらいからです。
シンプルにチャットワークに「テスト」というメッセージを送るというものです。
Sub チャットワークにメッセージを送る()
Const API_TOKEN As String = "xxxxxAPIトークンxxxxx"
Const ROOM_ID As String = "xxxxxxxx" 'ルームID
Dim httpReq As XMLHTTP60
Set httpReq = New XMLHTTP60
With httpReq
.Open "POST", "https://api.chatwork.com/v2/rooms/" & ROOM_ID & "/messages"
.setRequestHeader "Content-Type", "application/x-www-form-urlencoded"
.setRequestHeader "X-ChatWorkToken", API_TOKEN
.Send "body=テスト"
End With
Set httpReq = Nothing
End Sub
今回のポイントは13行目ですね。ここのbodyの値を「マクロの完了メッセージ」にすればOKというわけです。
他の部分はいっぱいあれこれありますが、メッセージを送るための設定とかいろいろやっている部分なので、今回は使いまわしでいけちゃいます。
テスト用のプロシージャ
今回は、以下の記事を参考に、実行時間も含めてチャットで完了報告を送りたいと思います。
Sub countSpeed()
Dim Start, Finish As Variant
Start = Time
Dim i As Long
Sheet1.Cells.Clear 'Sheet1をクリア
For i = 1 To 500000
Sheet1.Cells(i, 1).Value = i
Sheet1.Cells(i, 2).Value = Sheet1.Cells(i, 1).Value * 10
Next i
Finish = Time
MsgBox "マクロの実行が完了しました" & vbLf & "実行時間は" & Format(Finish - Start, "nn分ss秒") & "でした"
End Sub
特に意味があるものではないですが、そこそこ実行時間がかかりそうな処理と、その結果と実行速度をメッセージで表示するものです。
このメッセージボックスの代わりに、チャットワークへのメッセージ送信をしたいというわけです。
チャットワークへのメッセージ送信をプロシージャ化
冒頭のプロシージャについて、汎用性を高めるために、プロシージャ化をします。
ルームIDと、送信するメッセージを渡すと、実際にチャットワークへPOSTリクエストを送り、メッセージを送信するというものです。
Sub sendChat(ByVal roomId As String, ByVal message As String)
Const API_TOKEN As String = ""xxxxxAPIトークンxxxxx"
Dim httpReq As XMLHTTP60
Set httpReq = New XMLHTTP60
With httpReq
.Open "POST", "https://api.chatwork.com/v2/rooms/" & roomId & "/messages"
.setRequestHeader "Content-Type", "application/x-www-form-urlencoded"
.setRequestHeader "X-ChatWorkToken", API_TOKEN
.Send "body=" & message
End With
Set httpReq = Nothing
End Sub
チャットワークへのメッセージの生成とsendChatの呼び出し
チャットワークへのメッセージの呼び出しですが、以下のようにcountSpeedを変更します。
Sub countSpeed()
Dim Start, Finish As Variant
Start = Time
Dim i As Long
Sheet1.Cells.Clear 'Sheet1をクリア
For i = 1 To 5000
Sheet1.Cells(i, 1).Value = i
Sheet1.Cells(i, 2).Value = Sheet1.Cells(i, 1).Value * 10
Next i
Finish = Time
Const ROOM_ID As String = "xxxxxxxx" 'ルームID
Const ACCOUNT_ID As String = "xxxxxx" 'アカウントID
Dim msg As String
msg = "[To:" & ACCOUNT_ID & "][info]"
msg = msg & "マクロの実行が完了しました" & vbLf
msg = msg & "実行時間は" & Format(Finish - Start, "nn分ss秒") & "でした"
msg = msg & "[/info]"
Call sendChat(ROOM_ID, msg)
End Sub
チャットワークに送るメッセージ文字列を変数msgに生成をして、sendChatを呼び出している16~25行目が新たに追加・修正した部分です。
ACCOUNT_IDには、自分のアカウントIDを付与しています。これで、自分宛の「To」がつきます。
実行結果
こちらのプロシージャcountSpeetを実行すると、以下のようにチャットワークにマクロの実行完了を、自分へのメンション付きで、お知らせすることができます。
まとめ
エクセルVBAでマクロの実行完了をチャットワークに通知する方法についてお伝えしました。
これで、ちょっと処理時間のマクロをPCで実行しているときに、席を外しちゃったりしても大丈夫ですね。
エラーが出たときにも通知が来るようにするなどをすると良いかもしれませんね。
また、便利な使い方を紹介していきます。
どうぞお楽しみに!