VBAオジサンのらくがき帳

SleepやWaitで処理を一定時間とめる

2021-08-04 00:00:00

処理の間に一定の間隔を開けたい場合に使える方法を紹介します。1秒単位で多少誤差があってもよければApplication.Waitメソッドが使用できます。1ミリ秒単位であればWindowsのAPIのSleep関数を使うのがいいと思います。A1セルに10から0までカウントダウンするサンプルを作成しました。(※ Application.Waitメソッドは秒の切り替わりで次の処理が実行されるので1秒以内の誤差が出ます。1秒で設定するとすぐに実行される場合があります。)

Application.Waitメソッド

Dim i As Long
For i = 10 To 0 Step -1
    Range("A1").Value = i
    Application.Wait Now + TimeValue("00:00:01")
Next i

Sleep関数

Sleep関数を使用するにはモジュールのプロシージャ宣言より前に下の宣言が必要止まります。

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

使用する側のコードは下のようになります。

Dim i As Long
For i = 10 To 0 Step -1
    Range("A1").Value = i
    Sleep 1000
Next i