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

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

こんな時は
「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とかと同じ制度だね

検索でOR条件・AND条件を使う

Outlookのクイック検索(Ctrl+Eキー)の検索はデフォルトでは単語「or」条件なので不便。
そういうときは「AND」をつかいましょう。

 タコ AND イカ
 タコ OR イカ
 タコ NOT イカ

これだけ覚えておけばOK。