Excel VBAでマクロの処理を一時停止させたり、処理が無限ループに陥ったときの強制終了の方法について質問がよくきます。
VBAの処理を一時停止させるには「Wait」メソッドを使います。
また、処理の無限ループなどの強制終了ボタンは、WindowsとMacで異なりますので、それぞれの終了ボタンについて紹介します。
今回は、VBAの処理を途中で止めるための一時停止方法や強制終了方法について徹底的に解説していきますね☆
VBAの処理を一時停止させる方法(Waitメソッド)
マクロを実行している途中で一時停止させるには、Applicationオブジェクトの「Wait」メソッドを使います。
「Wait」メソッドで処理を途中で停止させるには、以下の2通りがあります。
- 指定時間が経過するまで一時停止させる。
- 指定時刻まで一時停止させる。
Waitメソッド1:指定時間が経過するまで一時停止させる。
指定した時間が経過するまで一時停止させるには、以下の構文になります。
▶構文:Waitメソッド【指定時間が経過するまで一時停止させる】
Application.Wait Now + TimeValue("0:00:03") ’現在時刻から3秒間停止させる
Nowは現在時刻を表すので、現在時刻から3秒間一時停止させる動きをします。
また、指定時間に変数を使ってマクロを一時停止させたい場合は以下ような記述になります。
【指定時間に変数を使う場合】
Dim waitTime As Variant
waitTime = Now + TimeValue("0:00:03")
Application.Wait waitTime
このとき停止させる時間はVariant型で指定します。
Waitメソッドでマクロの処理を一時停止させるコード例は以下のようになります。
Sub Waitメソッドの動作1()
MsgBox "処理開始"
Application.Wait Now + TimeValue("0:00:03")
MsgBox "処理再開"
End Sub
【実行結果】
マクロを実行すると「処理開始」のメッセージボックスが表示されるので、「OK」を押して3秒後に「処理再開」のメッセージボックスが表示されます。
↓
【OKを押して3秒後】
↓
Waitメソッド2:指定した時刻まで一時停止させる。
処理を指定した時刻まで一時停止させるには、以下の構文になります。
▶構文:Waitメソッド【指定した時刻まで一時停止させる】
Application.Wait "23:38:02"
上のように記述すると、マクロの処理が「23:38:02(23時38分02秒)」まで停止します。
逆に言うと、「23:38:02」が過ぎると途中で停止していた処理が再開します。
具体的には、以下ようにWaitメソッドを「23時38分02秒」に設定し、Msgboxで「現在の時刻」を表示させると、以下のように指定時刻「23:38:02」になったことで処理が再開したことが分かります。
Sub Waitメソッドの動作2()
Application.Wait "23:38:02"
MsgBox "処理開始" & Now
End Sub
【実行結果】
VBAの処理を途中で強制終了させる方法
マクロを途中で一時停止させるなんて甘っちょろいことではなく、VBAの処理が無限ループに陥ったのでキーボードで強制終了させたいという場合は、WindowsとMacでは異なります。
VBAの強制終了ボタン:Windows
- Ctrl + Pause(またはBreak)
- Esc
VBAの強制終了ボタン:Mac
- command + .(ピリオド)
- command + control + Esc
- Esc(2回押し)
まとめ
今回は、VBAの処理を途中で止めるための一時停止方法や強制終了方法についてお伝えしました。
VBAを途中で一時停止させる方法は「Wait」メソッドを使います。
一時停止には以下の2種類があります。
- 指定時間が経過するまで一時停止させる。
- 指定時刻まで一時停止させる。
また、VBAの処理を途中で強制終了させる方法は以下のとおりです。
VBAの強制終了ボタン:Windows
- Ctrl + Pause(またはBreak)
- Esc
VBAの強制終了ボタン:Mac
- command + .(ピリオド)
- command + control + Esc
- Esc(2回押し)
処理を途中で止めることはプログラミングでは必要なことですので、今回の記事がお役に立てば幸いです☆
コメント