Sub 待機処理() MsgBox "5秒間待ちます" Application.Wait Now + TimeValue("00:00:05") MsgBox "待機終了" End Sub
例2:特定時刻まで待つ(例:午前10時)
Sub 10時まで待つ() Application.Wait "10:00:00" MsgBox "10時になったので処理を再開します" End Sub
🔷 主な用途
用途
説明
処理の一時停止
一定時間ユーザーに内容を確認させたり、外部システムと同期する
タイミングの調整
メール送信やWebアクセスなど、間隔を開ける必要がある処理に使用
擬似的な進行表示
ループと組み合わせてプログレス風の処理を作る
🔷 特徴と制約
✅ 特徴
シンプルで使いやすい
ExcelやAccessが起動していれば確実に動作する
Windowsのシステムクロックに従っているため、時間精度は十分
❌ 制約・注意点
制約
内容
秒単位までしか指定できない
ミリ秒単位の制御は不可(たとえば 0.5秒 待つことはできない)
強制的に待機
待機中はユーザー操作を一切受け付けない(Excelもフリーズしたように見える)
処理の割り込みができない
途中で中断ボタンなどを使っても処理を止められない
並列処理は不可
他の処理と同時には実行できない(VBAはシングルスレッド)
🔷 DoEvents との違い
比較項目
Application.Wait
DoEvents
目的
指定時間だけ処理を止める
一時的にOSに制御を渡し、他のイベントを処理
実行中の動作
完全に停止(応答なしに見える)
処理を継続しつつ、画面更新・操作を許す
使い方
Wait Now + 時間
DoEvents を呼ぶだけ
UI応答
無し
有り
🔷 実用例:待機+DoEvents の併用(疑似タイマー)
Sub 疑似タイマー() Dim i As Integer For i = 1 To 5 Debug.Print "処理中:" & i Application.Wait Now + TimeValue("00:00:01") ' 1秒待つ DoEvents ' 画面更新やキャンセルの受付 Next i MsgBox "処理終了" End Sub