こんにちは、Ryoです。
通常の処理では使用頻度が低いと思いますが、外部機器との通信制御などを行う際に送受信の間など、一時的に処理を中断(待機)させたいケースもあるかと思います。
このような場合はWaitメソッドを使って指定した時間、処理を中断(待機)させることが出来ますので、今回はその方法について書いていきます。
1.サンプル概要
シンプルにメッセージボックスを表示して、「OK」を押すと10秒間処理を中断して待機し、時間経過後に処理再開を知らせるメッセージボックスを表示するものです。
処理開始時に表示されるメッセージボックスのOKボタンをいちいち押すのも煩わしいので、表示したら1秒後に自動的に消えるサンプルとします。
最初に表示されるメッセージボックスですが、この1秒後に自動で閉じます。
その後10秒間経過したら、以下のメッセージボックスが表示されます。
2.サンプルコード
Sub Sample1() Dim msg1 As Object Set msg1 = CreateObject("WScript.Shell") msg1.Popup "サンプルコード処理の10秒間中断!" & vbCrLf & _ "(これは1秒後、自動で閉じます)", 1, "Sample1", vbInformation '10秒間処理を中断する Application.Wait Now + TimeValue("00:00:10") '処理再開のメッセージボックスを表示 MsgBox "10秒の待機時間が完了し、再開しました!", vbInformation End Sub
先ず最初のメッセージボックス処理は、上述コードの Set msg1 = Nothingまでです。
ここで何をしているかと言いますと、メッセージボックスを自動的に閉じる為にWindows Script HostのPopupメソッドを使っています。
object.Popup(strText,[nSecondsToWait],[strTitle],[nType])
構文としてはこのようになっていて、nSecondsToWaitに時間を指定することで閉じるまでの待機する時間を設定することが出来ます。
詳細な解説はMSDNのサイトがわかりやすいので、ご参照ください。
◆処理を中断(待機)するWaitメソッド
その後、本題の待機時間設定についてはWaitメソッドを使います。
オブジェクト.Wait Time
構文はこのように記述し、引数Timeに指定した時間、処理を中断するものです。
本サンプルは10秒間処理を中断するので、Now関数で現在日時を取得し、そこにTimeValue関数を使って10秒間加算した時刻に処理を再開するようになっています。
実行すると、最初のメッセージボックスが閉じられてから10秒後に次のメッセージボックスが表示されると思います。これは処理の都合上、少し待機させたい場合などに使えるのではないかと思います。
3.まとめ
VBAで処理を中断(待機)させたいケースは多くないかもしれませんが、このような待機時間を設定することも出来ることを知っておくと、何かの際に役に立つかと思い書いています。
併せてメッセージボックスのオートクローズも書いてみましたので、機会があればご検討くださいませ!
以上、処理の実行を指定した時間待機させる方法についてでした!
今回の記事が何かの参考になれば幸いです。
Ryo