こんばんは、わたあめです。今日はVBAのデバッグ時の困りごと解消記事です。
VBA作成中に、メッセージボックスで値を表示させて確認する事ってありませんか?私は良く使うのですが、メッセージボックス表示中に中断することが出来ない状態に陥りました。
というのも数万回繰り返すFor文の中でメッセージボックスを表示させる処理をしていました。ダイアログの[OK]ボタンを押しても、次のメッセージボックスがすぐに出てきてしまって止められないという状況です。
を記事にまとめていきます。対処方法だけ見たいという方は「」の章にいきなり飛んでください。体系的に理解していきたいな、という方は章を順に追ってみてくださいね。それでは、いってみましょう!
VBAで処理を中断するには
まず、おさらいでVBA実行中に中断するには以下の方法で、中断することが出来ます。
- Microsoft Visual Basic for Applicationsのリセットボタン(青い四角)をクリックする
- キーボードの[ESC]キーを押す
ですが、リセットボタンをクリックしようとしても、メッセージボックス表示中はクリックできませんでした。(反応なし)また、キーボードの[ESC]キーを押しても押しても次のメッセージボックスが出てくるんです。
事象詳細
事象の詳細です。例えば以下のようなメッセージボックスを1万回表示するマクロサンプルで同じ事象を発生させることが出来ます。
Sub Test()
Dim i As Integer
For i = 1 To 10000
MsgBox ("テスト" & i)
Next
End Sub
このサンプルマクロを実行すると、以下のようなメッセージボックスが1万回表示されます。中断も出来ないですし、[OK]ボタンを押しても押しても次のメッセージダイアログが表示されます。
対処方法
事前対処:ブレークポイント
事前にできる対処(この事象を発生させない予防策的な)はブレークポイントをあらかじめ入れておくということです。

具体的には、メッセージボックスの処理分の近くにブレークポイントを入れおくと良いです。ブレークポイントで処理が一旦ストップしている時に、VBAスクリプトの実行を中断すれば処理は止まります。
ブレークポイントの入れ方
ブレークポイントの挿入方法は以下の通りです。
- ポイント入れたい行にカーソルを合わせる(または範囲指定)
- [デバッグ]>[ブレークポイントの設定/解除]をクリック
これで、ブレークポイント入れたい箇所が茶色背景の白文字になり、左側に茶色い丸が付くかと思います。茶色い丸部分をダブルクリックする事でも挿入/解除が可能です。
実行中対処:EnterとESCキーの同時押し
実行中にメッセージボックスが表示されていて、無限に表示されてしまってどうしても、中断出来ない場合は、キーボードの[Enter]キーと[ESC]キーを同時に押してみてください。一度ではなく、何度も何度も連打してみてください。
中断できないのは、メッセージダイアログの[OK]ボタン押下後に次のメッセージが表示されますが、その間に[ESC]キーの情報がExcelへ送信されないことが原因になっている気がします。人間の押し方だと同時押ししてるつもりでも、コンマ1秒のズレが出てくるので、そのズレを利用するという訳です。絶妙なタイミングで止まります。私は10回連打以内で中断できることが多かったです。
さいごに
いかがだったでしょうか。無事に中断できたでしょうか?無理にタスクを終了させるという手法などもありますが、その場合折角作ったプログラムが保存されないまま終了して回復できないこともあるので、それは嫌だなと思って。それでは、また!