VBAマクロで一定の秒数待つ方法(アプリが固まらないよう入力待ちも行う)

VBAマクロを組んでいると、一定時間待つ必要があるときがあります。

こんな時、通常、waitやsleepを使ったりするのですが、その間、入力が出来ずに固まったようになったり、DoEventsで入力できる状態にしても、Loopで回数指定すると正確な秒数待てなかったりします。

今回、どうしても、「〇秒待ちたい」という要望があったので、それを実現する方法を模索しました。

よく使うので、メモしておきます。

以下は、3秒待つ関数です。

普通にDoEventsするよりパフォーマンスも良いと思います。

例:

'モジュールの最初に以下を宣言する
Declare Function GetInputState Lib "USER32" () As Long

'一定秒数待つ関数
Sub waitMin()

    
    Dim time1, time2

    time1 = Now
    time2 = Now + TimeValue("0:00:03")
    
    Do Until time1 >= time2
        If GetInputState() Then DoEvents
        time1 = Now()
    Loop
        
        
End Sub