PowerAutomateで日時スレッドに投稿する

PowerAutomate便利です。
Office関連と連携しながら色々できるのいいですよねー。

私はボットを作って各種情報をTeamsに呟かせているのですが、
普通にやると発言が多くなりすぎてみずらいので
日時でスレッドを作り、そこに呟かせるように修正してみました。

日時のスレッド作成

時刻トリガで日時の発言をさせます。
どうせなので以下のような関数で日付を記載しておきます。

formatDateTime(convertTimeZone(utcNow(), 'UTC', 'Tokyo Standard Time'),'yyyy/MM/dd')

このあと自動的に返信を行うために上記発言のIDを保存しておきます。
PowerAutomateでストレージ代わりに使うとしたらやはりエクセルがおすすめです。
エクセルに日付、IDを格納する表を作っておき、そこに日付、IDを保存します。
このとき表の書式設定は文字列にしておきましょう。

随時発言を返信に修正。

発言フローの中でまず該当エクセルからIDを引っ張ります。そして
Teamsの「チャネル内のメッセージで返答」で該当IDに返答すればOK.

つい先日までFlowBotでは返答ができなかったのですが、いつの間にかできるようになりましたね。
日々機能改善されているPowerAutomateでこれからも楽しくやっていきましょう。

画面が操作可能なウインドウにいないときの対処

マルチディスプレイ環境で操作していると
たまにディスプレー外に表示され操作できなくなることがあります。

こんな時は
「Alt+Space」でコンテキストメニュを開いて「M」で移動を選択し矢印キーで右か左を押下して画面内まで移動させましょう。

f:id:GARAPON:20210419133458p:plain

これで快適。

VBAからWin32のSleepを呼び出す

vbaでスリープさせる方法はたくさんありますが、Win32APIのスリープを直呼びしてみたらいまいちだったけどメモ。

呼び出し方は以下の通り。

    Private Declare PtrSafe Sub Sleep Lib "kernel32" (ByVal ms As LongPtr)

   Private Sub wait()
       Sleep 5000 
   End Sub

上記で使えはするが、SleepだとExcelなりOutlookなりVBAの母艦の反応も悪くなるので、VBAでつかうならdoEventのほうがCPUは食うけどお勧めな気がします。

なのでお蔵入りですね。

OutlookVBA フォルダ選択ダイアログの出しかた

outlookVBAでフォルダ選択ダイアログを出すには以下のように
PickFolderを呼び出しましょう。

Sub FolderPick()

    Dim objNS As NameSpace
    Dim objFolder As Folder

    Set objNS = Application.GetNamespace("MAPI")
    Set objFolder = objNS.PickFolder

    If TypeName(objFolder) <> "Nothing" Then
        Debug.Print " objFolder: " & objFolder
    Else
        Debug.Print "Cancel"
    End If

    Set objFolder = Nothing
    Set objNS = Nothing

End Sub

f:id:GARAPON:20210318170319p:plain
こんな感じでみえる。


OutlookVBAはほんと情報なくてめんどい。

ブラウザRPA作るときに便利なコード

色々とrpaはあるけれど、自分しか使わない、少し複雑なこともしたいという時はvbaはやっぱ便利。

ieの処理が終わるまで待つ

Function IEWait(ByRef objIE As Object)
    Do While objIE.Busy = True Or objIE.readyState <> 4
        DoEvents
    Loop
End Function

指定の時間待機

Function WaitFor(ByVal second As Integer)
    Dim futureTime As Date
    futureTime = DateAdd("s", second, Now)
    While Now < futureTime
        DoEvents
    Wend
End Function

Excelの計算精度はIEEE 754準拠

excelってどんな精度なのかと調べてみた

Microsoft Excel は、IEEE 754 の仕様に基づいて設計され、浮動小数点数の格納方法と計算方法を決定していました

Excel で浮動小数点演算の結果が不正確になる可能性がある | Microsoft Docs

java のdoubleとかと同じ制度だね