Applicationメソッド Application.Wait

Application

Application.Wait は、VBA(Visual Basic for Applications)における Application オブジェクトのメソッドの一つで、処理を一時的に停止(待機)させるために使います。指定した時刻までVBAの処理を停止することで、「一定時間待ってから次の処理を実行したい」といったニーズに対応できます。


🔷 概要:Application.Wait とは?

  • 指定した 日時までVBAの実行を停止する
  • 主に「一時停止」「タイミング調整」「ユーザーが処理を確認するための間」などで利用される
  • 時間の単位は 秒単位(ミリ秒単位の待機はできません)

🔷 構文

Application.Wait(Time)

引数:

名前説明
TimeDate停止終了時刻(例:Now + TimeValue("00:00:10")

🔷 使用例

例1:5秒待機

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.WaitDoEvents
目的指定時間だけ処理を止める一時的に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

🔷 よくある間違いと対策

誤解説明
Wait "00:00:05" で5秒待てると思っているNG:これは「午前0時0分5秒(AM0:00:05)」のこと。Now + TimeValue(...) を使うべき
ミリ秒単位で使いたいできない。代替として Sleep(API)や Timer を使う必要あり(ただし複雑)

🔷 まとめ

項目内容
メソッド名Application.Wait
目的VBA処理の一時停止(秒単位)
使い方Application.Wait Now + TimeValue("00:00:05")
停止中の操作できない(Excelは応答なし状態)
補足ミリ秒単位が必要な場合は Windows API (Sleep) を検討

✅ 代替案:APIでミリ秒単位の待機(高度)

Declare PtrSafe Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long)

Sub ミリ秒待機()
Sleep 500 ' 0.5秒待つ
End Sub

※API使用はExcelの設定や環境に依存しますので、注意が必要です。

タイトルとURLをコピーしました