概要
WaitByDoEventsは、TimerとDoEventsを使って、指定したミリ秒だけ待機する汎用プロシージャです。
ChangePushedButtonColorでは、図形ボタンの色を一瞬だけ変えてから元に戻すための短時間待機に使っています。
使う場面
- UI表示を一瞬だけ変えてから戻したい
- 図形の簡単なアニメーションやフィードバックを入れたい
Application.Waitより短い待機をしたい- 待機中もExcelの画面更新やイベント処理を少し通したい
使用例
図形の色を一瞬だけ変えてから戻すような、短い待機に使います。
ActiveSheet.Shapes("Button1").Fill.ForeColor.RGB = rgbRed
Call WaitByDoEvents(100)
ActiveSheet.Shapes("Button1").Fill.ForeColor.RGB = rgbLightGray
コピー可能な実装コード
WaitByDoEvents.bas
vba
コードを読み込み中...初心者向けコード解説
Timerは、午前0時からの経過秒数を返します。最初に開始時刻をStartTimeへ保存し、ループ内で現在時刻との差分を見ています。
MillSecond / 1000でミリ秒を秒に変換し、指定時間を超えたらExit Doでループを抜けます。
ループ内でDoEventsを呼ぶことで、Excelが完全に固まったように見えにくくなります。
関連記事
注意点
- 長時間待機には向きません。
DoEvents中に別のイベントが動く可能性があるため、重要な排他制御には使いません。- 日付をまたぐほど長く待つ用途では、
Timerの扱いに注意が必要です。
軽いまとめ
WaitByDoEventsは、VBAのUI演出で短く待ちたいときに便利な部品です。ボタンの押下表現や簡単なアニメーションのように、数十から数百ミリ秒の待機を入れたい場面で使いやすくなります。
