VBAで指定時間だけ処理を止めるにはWindows APIのSleepを使います。
Windows APIのSleepを使用する
指定時間だけ処理を止めるSleepは、外部プログラムの応答を待つときなどに使用します。
1 2 3 4 5 6 7 |
Option Explicit Private Declare Sub Sleep Lib "kernel32" (ByVal ms As Long) Sub TestSleep() Sleep 2000 End Sub |
モジュールの最初でDeclareステートメントを使用します。
こちらの宣言を行うことによって、Windows APIのSleep関数を使えるようになります。
Sleepのあとに処理を止めたい時間を指定します。時間はミリ秒で指定します。
1秒の場合はSleep 1000、2秒の場合はSleep 2000です。
ミリ秒単位でSleepさせるのが直感的でなければ、関数を作成して秒単位でスリープさせましょう。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
Option Explicit Private Declare Sub Sleep Lib "kernel32" (ByVal ms As Long) Sub SleepSecond(mili_second As Long) Sleep mili_second * 1000 End Sub Sub TestSleepSecond() Call SleepSecond(2) End Sub |
Sleepでランダムな時間停止する
Windows APIのSleep関数とVBAのRnd関数とInt関数を使用してランダムな時間だけ処理を止めてみます。
Rnd関数
Int関数
ランダム時間だけ処理を止めるコードは以下になります。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 |
Option Explicit Private Declare Sub Sleep Lib "kernel32" (ByVal ms As Long) Sub RandomSleep(min_second As Long, max_second As Long) '################################################################################### '最低min_secondから最大max_secondの間までSleepする '----------------------------------------------------------------------------------- '引数 :min_second 最低Sleepさせる時間(秒) ' max_second 最大Sleepさせる時間(秒) '################################################################################### Dim sleepTime As Long sleepTime = (min_second * 1000) + Int((max_second * 1000) * Rnd) sleepTime = sleepTime - (sleepTime Mod 1000) Debug.Print "sleepTimeは" & sleepTime Sleep sleepTime End Sub Sub TestRandomSleep() Call RandomSleep(1, 5) End Sub |
RandomSleep がランダム秒数分だけ、処理を止めるSub プロシージャになります。
最低スリープ秒数を引数min_second、最大スリープ秒数を引数max_secondに設定すると
その範囲内からランダムに秒数を算出して、処理を停止します。
TestRandomSleepを実行するとRandomSleepを呼び出します。
上記のコードはCall RandomSleep(1, 5)と指定しているので、1~5秒の間で処理を停止します。
Rnd関数は、0以上1未満の値を返します。Int関数は小数点を切り捨てを行い、整数値を返します。
sleepTime – (sleepTime Mod 1000)で1000ミリ秒未満の値を切り捨てています。
コメント