top of page
検索

ExcelでVBA:エラートラップって?

更新日:4月23日

こんにちは。

いつものようにExcelでVBAを組んでいると、On Error包囲網の中でエラーが発生しているにも関わらずプログラムが中断されてしまう…という症状に💦

いろいろ調べると「エラートラップ」なる設定項目が影響しているそうで…。



■ 動作環境

 

OS: Windows 8.1

Excel: 2013



■ 「エラートラップ」オプション

 

VBE(Visual Basic Editor)メニューの「ツール」-「オプション」から「全般」タブを選択すると「エラートラップ」に関する設定があります。

それぞれを選択した際の動きを次のとおりです。


① エラー発生時に中断

エラーが発生すると、On Error系処理がアクティブかどうかに関わらず、中断されます。

また、発生箇所がクラスモジュール内でも同様に中断されます。


② クラス モジュールで中断

クラスモジュール上でエラーが発生すると、On Error系処理がアクティブでない場合のみ、クラスモジュールの発生箇所で中断されます。


③ エラー処理対象外のエラーで中断

エラーが発生すると、On Error系処理がアクティブでない場合のみ、中断されます。

ただし、クラスモジュールで処理されないエラーが発生した場合は、問題を起こしたクラスメソッドの呼び出し元で中断されます。



■ 実際の動作

 

次のプログラムで動かしてみました…。

3ケースをうまく表現するために、若干不自然なソースなのですが…(笑)


□ メイン関数

  • 「0で除算する」トラップを内包

  • エラー発生時は、clsTempクラスのerrorメソッドをコール


□ clsTempクラスのerrorソメッド

  • 「有効範囲外の配列インデックスを指定する」トラップを内包

 

① 「エラー発生時に中断」の場合

On Error系処理は機能せず、エラーが発生した箇所で即座に中断されます。


② 「クラス モジュールで中断」の場合

On Error系処理は機能するが、 クラスモジュール上でエラーが発生するとそこで中断されます。


③ 「エラー処理対象外のエラーで中断」の場合

前述同様、クラスモジュール内のトラップがキャッチされていますが、 呼び出し元で中断されます。



■ まとめ

 

いかがでしたでしょうか?

エラー発生時の動きって、デバッグの考え方や進め方によって、「エラートラップ」オプションを使い分けていくことで、より効果的に作業を進められるかもしれませんね。^^

次回以降も、苦労した点を備忘録しようと思います。

閲覧数:298回0件のコメント

Comments


bottom of page