MoreBeerMorePower

Power Platform中心だけど、ノーコード/ローコード系を書いてます。

Excel VBA から Microsoft Teams に メッセージ投稿

やってみた系です。

最近Excel VBAを勉強し始めたのですが、興味のある領域じゃないと覚えないなーと思ったので、まずはMicrosoft Teams や Web API を絡めてみようと思ったのがきっかけです。

tonari-it.com

こちらのブログを参考にして、Excel VBA で、Microsoft Teams へのメッセージ投稿を作ってみました。

Excel 側ではセルの入力をもとに、Teams のIncoming Webhookを利用するためのBodyを文字列結合で作成しています。

VBAでは文字列結合した結果を読み取って、WebhookのURLにPOSTしているだけです。

Incoming Webhookのメッセージ形式に関しては以下で書いています。

mofumofupower.hatenablog.com

ということで、VBAのコードはとても簡単!

Sub button1_Click()

Dim httpReq As XMLHTTP60
Set httpReq = New XMLHTTP60
httpReq.Open "POST", "ここにTeamsのWebhook URL"
httpReq.setRequestHeader "content-type", "application/json"
httpReq.Send Range("B6").Value

Do While httpReq.readyState < 4
    DoEvents
Loop

Debug.Print httpReq.responseText

Set httpReq = Nothing

End Sub

Range("B6").Valueは、B6のセルに文字列結合でBodyのJSONを書いているからです。(動画では白文字で隠した)

本来はJSON Converterなどを利用してJSONを作るほうが良いのだと思いますが、セルで文字列結合してもあまり変わらなそうだったので、簡単さを優先しました。

さらにAdaptive Cardの構成を凝ったものにすれば「ちょっとメンバーに連絡したいなー」というときのユーティリティにもなるかなと思います。

単純なAPI実行だけではなく、何らかの処理を入れる場合にはLogic Apps/Power Automateを呼び出してもよいかなと思います。

👇

追記

最も簡単なメッセージフォーマットであればB2とB3にそれぞれタイトルとメッセージが入っている想定で

CONCATENATE("{""text"": ""# ",B1,CHAR(10),CHAR(10),B2,"""}")

この式をB6セルに設定すれば完了です。 ただしこのとき、Teams側でも改行したければセル内でも2回改行を入れてください。

f:id:mofumofu_dance:20210114215245p:plain