VBAの一連のコードの中で、処理と処理との間で一定時間待機する方法をご紹介します。ここではフォームの[タイマ時]イベントを使ってそれを実現する方法を示します。
まず、指定時間経過したかどうかを表すフラグとして、次の変数を宣言します。これは一定時間待機するコードを含むプロシージャと[タイマ時]イベントプロシージャで共有する変数ですので、フォームまたは標準モジュールの"Declarations"セクションに宣言して、どちらのプロシージャからも参照できるようにします。
Private pblnTimePasted As Boolean
続いて、一定時間待機するコードを含むプロシージャと、[タイマ時]イベントプロシージャを、フォームのモジュールに次のように記述します。
Private Sub cmdProc_Click()
'****************************************************
'ここで何かの処理を実行します
'****************************************************
'指定時間経過したかどうかのフラグを"未経過"の状態にセットします
pblnTimePasted = False
'フォームの[タイマ間隔]プロパティに待ち時間をセットします
'ここでは1/1000秒の単位で、1.5秒を設定します
Me.TimerInterval = 1500
'指定時間経過したかどうかのフラグが"経過"状態になるまでループで待ちます
Do Until pblnTimePasted
'ループ内では DoEvents関数 によって制御をWindowsに渡さないと[タイマ時]イベントが発生しません
DoEvents
Loop
'フォームの[タイマ間隔]プロパティをリセットして以降タイマ時イベントが発生しないようにします
Me.TimerInterval = 0
'****************************************************
'ここで次の処理を実行します
'****************************************************
End Sub
Private Sub Form_Timer()
'指定時間経過したかどうかのフラグを"経過"状態にします
pblnTimePasted = True
End Sub
|