【EXCEL VBA】VBEオプションのエラートラップの違いを知りたい

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内でエラーが発生しましたが、呼び出し元でプログラムが停止しています。

画像に alt 属性が指定されていません。ファイル名: image-17.png