VBA(マクロ)の処理を一時停止するコード

スポンサーリンク

一時停止が必要となる場合

InternetExplorerやコマンドライン、その他のアプリケーションをVBAで操作するときには、命令を受け取ったそれぞれのアプリケーションが命令を実行するのにかかる時間の分、次の命令を受け付けられない場合があります。

本来は操作する側のアプリケーション(ExcelVBAなど)に、操作される側の状態を逐一認識させればよいのかもしれませんが、処理がものすごく複雑になるので個人で使用するVBA(マクロ)でそれを作成するのは現実的ではありません。

そんな時によく使われるのが、VBA(マクロ)の処理を一時停止するコードをアプリケーションに対する命令文の間に入れておく方法です。
VBAを使って操作したいアプリケーションが命令を実行するのにかかる時間をおおよそ予測して、それよりも長い時間VBAの処理を一時停止しておくという原始的な対応です(笑)
しかしこの原始的な対応はかなり便利で、他のアプリケーションを操作する際には必須のコードになります。

一時停止のVBAコード

VBAの処理を一時停止するコードは大きく2つあります。それぞれメリットデメリットがあります。

①Application.Waitコードを使用する(ExcelVBAのみ)

VBAに元々存在するコードなので事前に準備をする必要なく、処理を停止したいところに1行記載するだけで一時停止できるお手軽な方法です。
以下の形式でコードを記載することで一時停止を行います。下の例は1秒処理を停止してから再開するコードです。

Application.Wait Now + TimeValue(“00:00:01”)

②Sleep関数を使用する(WindowsAPI)

VBAの標準のコードではなく、WindowsAPIというWindowsに搭載されている関数をVBAで使用する方法です。細かい停止時間の調節が可能で、正確な時間一時停止しますが、事前に「Sleep関数を使用します」という意味のコードを記載しておく必要があります。
標準モジュールの宣言セクション(Subよりも上の部分)に以下のVBAコードを記載します。

Declare Sub Sleep Lib “kernel32” (ByVal dwMilliseconds As Long)

あとは他のアプリエーションに対する2つ以上の命令と命令の間など、一時停止したいところで以下のようなコードを記載します。数字部分は停止時間を1/1000秒単位で記載します。よって1000と記載すれば1秒一時停止するということです。

Sleep 1000

全体の構成は以下のようになります。

Declare Sub Sleep Lib “kernel32” (ByVal dwMilliseconds As Long)
Sub IE操作()
命令文①
Sleep 1000
命令文②
End Sub

時間を細かく調節できるので私は基本Sleep関数を使います。1回の時間では大差がありませんが、繰り返しの処理で一時停止を500回行う場合、1秒待つのと0.5秒で済むのだと終了までに4分以上の差が出ます。

Sleepは重い処理をしたときにWindows自体に負荷がかかりにくくする場合にも使用されます。記載方法についてはまた別の機会にお伝えします。

スポンサーリンク

シェアする

  • このエントリーをはてなブックマークに追加

フォローする