Excel VBAのWaitメソッドについて、基礎から応用まで解説し、実務的なサンプルコードを紹介します。
この記事を読めば、Excel VBAで効果的に待機処理を行う方法を習得できます。
Waitメソッドとは
Waitメソッドは、指定した時間だけVBAコードを一時停止するためのメソッドです。Waitメソッドは、マクロの処理を一時停止している間に他のアプリケーションを使用することができます。
Waitメソッドは、以下のように記述します。
1 |
Application.Wait (Now + TimeValue("0:00:05")) |
上記のコードは、5秒間待機するコードです。
Waitメソッドは、引数に待機時間を指定します。待機時間は、秒数で指定することもできます。
基本的なWaitメソッドの使い方
基本的には、Waitメソッドを使うときには、指定した時間だけ処理を一時停止するために使用します。例えば、マクロを実行する前に、あるファイルが保存されるのを待つ必要がある場合があります。
その場合、Waitメソッドを使用して指定した時間待機することで、ファイルが保存されるのを待つことができます。
以下の例では、5秒待機してからマクロを続行するコードを示しています。
1 2 3 4 |
Sub WaitSample() Application.Wait (Now + TimeValue("0:00:05")) ' 5秒後にこの行以降のコードが実行される End Sub |
応用的なWaitメソッドの使い方
Waitメソッドは、一定の時間を待機するための基本的なメソッドですが、応用的な使い方もできます。例えば、データをWebサイトから取得する際に、Webページが完全に読み込まれるのを待つ必要がある場合があります。
その場合、Waitメソッドを使用してWebページが完全に読み込まれるのを待つことができます。
以下の例では、InternetExplorerオブジェクトを使用して、Webページが読み込まれるまで待機するコードを示しています。
1 2 3 4 5 6 7 8 9 10 11 12 |
Sub WaitSample() Dim IE As Object Set IE = CreateObject("InternetExplorer.Application") IE.Visible = True IE.Navigate "https://www.example.com" ' ページが読み込まれるまで待機 Do While IE.Busy Or IE.ReadyState <> 4 Application.Wait (Now + TimeValue("0:00:01")) Loop ' Webページが完全に読み込まれた後の処理 ' ... End Sub |
上記のコードでは、InternetExplorerオブジェクトを使用して、指定されたWebページを開きます。
その後、Webページが完全に読み込まれるのを待機するために、Do Whileループを使用して、IE.BusyおよびIE.ReadyStateプロパティをチェックします。
IE.BusyプロパティがTrueになっている間、Webページはまだ読み込み中であることを示します。また、IE.ReadyStateプロパティの値が4でない場合、Webページが完全に読み込まれていないことを示します。
これらのプロパティがTrueおよび4でない場合は、1秒待機してから、再度ループを繰り返します。Webページが完全に読み込まれたら、ループが終了し、Webページが完全に読み込まれた後の処理が実行されます。
実務的なサンプルコード
Waitメソッドを使用すると、様々な実務的なタスクを簡単に処理することができます。
以下に、実務的なサンプルコードを紹介します。
ファイルが存在するかどうかを確認する
以下のコードでは、指定されたファイルが存在するかどうかを確認します。
ファイルが存在しない場合は、2秒待機してから再度確認します。
ファイルが存在するまで、このプロセスを繰り返します。
1 2 3 4 5 6 7 8 |
Sub CheckFileExists() Dim filePath As String filePath = "C:\test\example.xlsx" Do While Dir(filePath) = "" Application.Wait (Now + TimeValue("0:00:02")) Loop MsgBox "ファイルが存在します。" End Sub |
マクロを実行する前に、アプリケーションが完全に起動するのを待つ
以下のコードでは、指定されたアプリケーションが起動し、完全に読み込まれるのを待ちます。
アプリケーションが起動するまで、1秒待機してから再度チェックします。
アプリケーションが起動したら、そのアプリケーションでマクロを実行することができます。
1 2 3 4 5 6 7 8 9 10 11 12 |
Sub RunMacroAfterApplicationStart() Dim app As Object Set app = CreateObject("Excel.Application") app.Visible = True app.Workbooks.Add ' Excelアプリケーションが起動するまで待機 Do While app.Ready <> True Application.Wait (Now + TimeValue("0:00:01")) Loop ' アプリケーションが起動したらマクロを実行 app.Run "example_macro" End Sub |
マクロを複数のブックに対して実行する
以下のコードでは、複数のブックに対してマクロを実行します。
この例では、指定されたフォルダ内のすべてのExcelファイルに対してマクロを実行します。
各ブックを開く前に、2秒待機してから次のブックに進みます。
これにより、すべてのブックが完全に読み込まれるまで待機することができます。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 |
Sub RunMacroInMultipleWorkbooks() Dim filePath As String Dim fileName As String Dim wb As Workbook filePath = "C:\test\" fileName = Dir(filePath & "*.xlsx") Do While fileName <> "" Set wb = Workbooks.Open(filePath & fileName) ' ブックが完全に読み込まれるまで待機 Do While wb.Ready <> True Application.Wait (Now + TimeValue("0:00:02")) Loop ' マクロを実行 Call example_macro(wb) wb.Save wb.Close fileName = Dir() Loop End Sub |
まとめ
Excel VBAのWaitメソッドは、実務的なタスクを簡単に処理することができる便利なメソッドです。
この記事では、Waitメソッドの基礎から応用、そして実務的なサンプルコードを紹介しました。
これらのコードを参考にして、自分のVBAプログラムにWaitメソッドを導入してみてください。
コメント