【VBA】実行中にプログラムを一時停止する

エクセルVBAで使うコードの備忘録。VBAで処理を指定した時間の間一時的に停止する方法について。

スポンサーリンク

Waitメソッド

VBAで処理を一時的に停止する方法でメジャーなものの一つが、ApplicationオブジェクトのWaitメソッドを使用する方法です。

Waitメソッドは引数として「動作再開の時間」を与えます。つまり、Waitメソッドを実行すると引数として与えた時間まで処理が停止します。よって、指定した時間だけ処理を停止したい場合は、Waitメソッドに引数として「現在の時刻+停止したい時間」を与えます。

指定秒数だけ停止する

Call Application.Wait(Now() + TimeValue("00:00:01") * [停止したい秒数])

上記の例では、「TimeValue(“00:00:01”)」で一秒の長さを取得し、それを停止したい秒数倍して、指定秒数の停止を実現しています。

Sleep関数

もう一つの代表的な方法はSleep関数を使用する方法です。Sleep関数はVBAの関数ではなく、Windows API(ウィンドウズの機能を使用する関数群のようなもの)に定義されている関数です。

このWindows APIのように外部のライブラリに定義されている関数を使用するには、VBAのプログラム冒頭で「どのライブラリのどの関数」をプログラムで使うのかということをまず定義する必要があります。

定義文はこのような感じになります。

Private Declare Sub Sleep Lib "kernel32" (ByVal ms As Long)

こちらの文は「kernel32というライブラリにあるSleep関数を使うよ」ということを定義しています。

モジュール冒頭でこの定義文を書けば、プログラム内でSleep関数を使用することが可能です。Sleep関数は以下のように、引数として停止時間をミリ秒単位で与えてやれば、その時間だけ動作を停止します。

Call Sleep([停止したい時間(ミリ秒)])