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