
VBAのWaitメソッドとは?メソッドの解説と使用例
VBAでマクロを作成しているときに、「特定の時間に処理を再開したい」「○秒後に処理を再開したい」と思ったことはありませんか?
時間を指定して処理を行う場合のマクロを作成する場合は、Waitメソッドを使用してみましょう。
目次
1.Waitメソッドについて
1-1.Waitメソッドとは
実行中のマクロを指定した時刻まで停止し、指定した時刻になると処理を再開します。指定する時間は、「hh:mm:ss形式」で行います。似たような機能で、Sleep関数があります。Sleep関数については、下記リンクを参照してください。
関連記事1-2.Waitメソッドの構文
Waitメソッドの構文は下記の通りです。戻り値は、Boolean型(true:指定した時刻まで停止した、false:途中で強制終了した)です。
Application.Wait (再開する時刻)
1-3.Sleep関数との違い
Sleep関数とWaitメソッドとの違いは、下記の表にまとめています。
比較内容 | Sleep | Wait |
処理内容 | 指定した秒だけ処理を中断 その後、処理を再開 | 指定した時間まで処理を中断 その後、処理を再開 |
設定する内容 | 中断する時間 | 再開する時間 |
設定する値の単位(形式) | ミリ秒 | hh:mm:ss |
指定する時間のフォーマット | Integer型 | Date型 |
中断方法 | なし | ESCボタンを押下 |
使用時のデメリット | 処理の中断ができない | 過去の時間を指定すると、無限ループになり処理が終わらない |
採用基準の一つとして、使用目的が「中断する時間」と「再開する時間」のどちらを目的とするかがあります。
2.Waitメソッドの使用例
2-1.基本的な使用例
2-1-1.再開時刻を指定する
「特定の時間まで処理を待機して、時間が来たら実行したい」場合は、下記のように指定します。
Sub sample01() Application.Wait TimeValue("17:00:00") '17時に処理を再開 MsgBox "17時になったので、処理を実行します。" '処理例 End Sub
2-1-2.実行時から一定時間後を指定
停止する秒を指定して、時間が経過したら処理を再開したい場合は、下記のように指定します。
Sub sample02() Application.Wait (Now + TimeValue("0:00:05")) MsgBox "5秒経過したので、処理を再開します。" End Sub
2-2.特殊な書き方をする場合
2-2-1.強制終了(中断中にESCボタン押下)したかをチェック
Waitの戻り値をチェックすることで、指定した時間を停止したかを確認することができます。
Sub sample03() If Application.Wait(Now + TimeValue("0:00:10")) = False Then MsgBox "強制停止しました。" Else MsgBox "10秒経過したので、処理を再開します。" End If End Sub
2-2-2.ミリ秒を指定する場合
再開までの時間を、ミリ秒で指定することもできます。
Sub sample04() Dim ms As Long 'ミリ秒を格納 ms = 10000 '停止させたい時間をミリ秒で指定 Application.Wait (Now + ms / 86400000) MsgBox "10秒経過したので、処理を再開します。" End Sub
3.注意点
下記のように、「Application.」をWaitの前に記述しないと、実行時にエラー
Sub sample05() Wait (Now + TimeValue("0:00:05")) '「Application.」がWaitの前についていない MsgBox "5秒経過したので、処理を再開します。" End Sub
4.最後に
WaitメソッドはSleep関数と処理は似ていますが設定する値の単位が異なるので、使用目的に応じて使い分けてください。
コメント