VBAがループ等で固まった場合の対応方法

VBAでループ処理を実行したときに、処理が返ってこずExcelごと固まってしまうことがあります。
その場合の対処方法を書きます。

Ctrl + Breakキー(またはCtrl + Pauseキー)

固まっているVBAの画面を開いて、Ctrl + BreakキーまたはCtrl + Pauseキーを押します。
運が良ければ、実行中のコードがデバッグ状態で止まってくれます。
あとはリセットボタン(停止ボタン)を押すなり、処理行を変更したりするなりで適切に処置します。

リセットボタンは下の絵の青い四角ボタンですね。表示されていない場合はメニューバーを右クリックして、「標準」を選ぶと出てきます。

処理行を変更する場合は、次に処理を行いたい行で右クリックし、「次のステートメントの設定」を選択します。

ファイル操作などのOpenからCloseまでの一連の操作が必要な処理などは、Closeなどの終了処理に処理行を移して、きちんと停止した方がいいとは思います。
と言いながら、私もリセットボタンを容赦なく押したりします。
でも問題になったことはほとんどないです。もし問題があれば再起動しちゃえばいいですしね。

ただ、もしOracleなどの外部データベース等を利用している場合であれば、PCを再起動しても外部データベース等は処理途中の状態が残ったままになることはありますのでそこはご注意ください。

Alt + Tabキー

Ctrl + Breakキーが効かない場合はメッセージボックスなどが裏に隠れていたりすることがあります。
Msgbox関数でなくてもエラーや警告メッセージであることもありますので、エラーダイアログでOKボタンなどを押されるのをVBA側が待っていることもあります。
そのため、Atl + Tabキーを押してエラーダイアログを表示させて処理を続行させます。

これでもダメな場合は以下の手順でExcelを強制終了しましょう。


Excelが複数起動しているか確認

タスクバーを右クリックしてタスクマネージャの起動を選択するか、Ctrl + Alt + Deleteキーを押してタスクマネージャの起動を選択します。

プロセスタブを選択して、一覧からEXCEL.EXEを選択します。VBAはVBA.EXEみたいなものがあるわけではなくExcelの一部のためExcelが対象になります。

ここで、EXCEL.EXEが複数ないか確認しておきます。「イメージ名」の部分をクリックすると名前で昇順と降順が切り替わりますので、見やすくなります。

複数起動していた場合は、VBAが実行していない方のExcelは固まっていないはずなので、そちらのブックを全て保存して終了します。

Excelを強制終了

Excel自体が固まってしまって、VBAどころかPC作業自体がダメになった、という場合はExcelを強制終了しましょう。
先ほど起動したように再度タスクマネージャを起動し、EXCEL.EXEを選択して「プロセスの終了」ボタンを押して強制終了します。
複数Excelが起動している場合はどのプロセスが固まっているのかがタスクマネージャからは完全には分かりませんので、全てのEXCEL.EXEを終了する方が無難です。

関連記事

サブコンテンツ

このページの先頭へ