VBAでマクロが落ちる?「エラートラップ」の使い分けで原因を素早く特定!
※この記事はVBA初級の方向けの記事です。
VBAのエラーハンドリングでエラー箇所が正確にわからないことってありますよね。
調査するためには、on errorをコメントアウトするなどの変更を加えないといけません。
私自身も、運用の現場でVBAにまだ不慣れだった頃、
エラーの原因が全然わからなくて苦労した記憶があります。
VBAを始めたばかりの頃は、エラーが怖くてコードを触るのも億劫でした。
そんな時に便利なのが「エラートラップ設定」
実は、VBE(Visual Basic Editor)の設定で「エラー検知の挙動」を変更できるって知ってましたか?
それがこちらの「エラートラップ」の設定画面です。
何も触らないと下記画面になっています。
VBE上で「ツール」→「オプション」→「全般」タブを開くと見つかります
エラートラップの3つのモード
ここで選べる3つのモードについて、それぞれ解説していきます。
1. エラー発生時に中断(推奨)
On Errorがあっても無視して、その場で止まってくれるモード
デバッグには最も便利
マクロが「どこで落ちたのか」が一発で分かる!
2. クラス モジュールで中断
通常のモジュールでは On Error が効く
クラスモジュール内でエラーが起きた場合だけ中断してくれる
オブジェクト指向的にVBAを書いてる人向け(中〜上級者用)
3. エラー処理対象外のエラーで中断(デフォルト)
エラーハンドリング(On Error)が書かれている箇所では止まらず、処理を続ける
そのため、On Errorの中でうまく処理できないと、原因が見つけにくい…
運用環境ではこの設定が多いですが、開発中は避けた方が無難です。
まとめ
マクロが黙って終了してしまうときは、まず「エラートラップ設定」を見直してみよう!
ソースを変更せずにエラー位置を調査したいときは、「エラー発生時に中断」が超便利
On Error のコメントアウトや置換作業よりも安全&手軽
VBAのエラーって、なかなか一筋縄ではいかないですよね。
でも「エラートラップ設定」を理解して使い分けるだけで、デバッグ効率が大きく変わります。
エラーを見つけたいときにぜひ試してみてください!