やってみた系です。
最近Excel VBAを勉強し始めたのですが、興味のある領域じゃないと覚えないなーと思ったので、まずはMicrosoft Teams や Web API を絡めてみようと思ったのがきっかけです。
こちらのブログを参考にして、Excel VBA で、Microsoft Teams へのメッセージ投稿を作ってみました。
Excel VBAすげーな
— Hiro (@mofumofu_dance) 2021年1月14日
TeamsにAdaptive Card送信できた pic.twitter.com/J8QhRCfSc2
Excel 側ではセルの入力をもとに、Teams のIncoming Webhookを利用するためのBodyを文字列結合で作成しています。
VBAでは文字列結合した結果を読み取って、WebhookのURLにPOSTしているだけです。
Incoming Webhookのメッセージ形式に関しては以下で書いています。
ということで、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を呼び出してもよいかなと思います。
👇
TwitterのOAuthの設定とか面倒だったので、Power Automateに全部任せればいいかという雑な発想だけど、なんとなくJSONを渡せたし満足。 pic.twitter.com/h8w6a1GBIc
— Hiro (@mofumofu_dance) 2021年1月12日
追記
最も簡単なメッセージフォーマットであればB2とB3にそれぞれタイトルとメッセージが入っている想定で
CONCATENATE("{""text"": ""# ",B1,CHAR(10),CHAR(10),B2,"""}")
この式をB6セルに設定すれば完了です。 ただしこのとき、Teams側でも改行したければセル内でも2回改行を入れてください。