VBEのオプションの「全般」タブに「エラートラップ」という項目があり、以下3種類の項目を選択することができます。違いについて気にしたことはなかったのですが、今回調査をしてみました。
- エラー発生時に中断
- クラスモジュールで中断
- エラー処理対象外のエラーで中断
各項目の違いを知るためにサンプルプログラムを作成しました。非常に簡単なプログラムなので説明は不要かと思います。
'標準モジュールに記載してください
Option Explicit
Sub sample()
On Error GoTo Err_Handler
Dim inst As New Class1
Dim i As Long
'Long型に文字列代入でエラー。Error_HandlerへJump
i = "test"
Exit Sub
Err_Handler:
inst.classSample
End Sub
'クラスモジュールに記載してください
Option Explicit
Public Sub classSample()
Dim i As Long
'Long型に文字列代入でエラー
i = "abc"
End Sub
このプログラムを標準モジュールから実行させて動きの違いを見ていきたいと思います。
「エラー発生時に中断」を選択した場合
エラーが発生した箇所で、即プログラムが停止しています。On Error Gotoは無視されます。異常系処理を実行させたくない時、このオプションを選択するのが良いのではないでしょうか。
「クラスモジュールで中断」を選択した場合
On Error Gotoが処理され、Class1:classSample()がコールされています。classSample内(クラスモジュール内)でエラーが発生し、即プログラムが停止しています。
「エラー処理対象外のエラーで中断」を選択した場合
On Error Gotoが処理され、Class1:classSample()がコールされています。classSample内でエラーが発生しましたが、呼び出し元でプログラムが停止しています。