Excel VBAで組んだ処理でエラーが発生した時、デバッグモードに移ってしまうとどのモジュールのどのプロシージャでエラーが発生したのかよくわからなくなることがあります。
そのような場合、エラー発生箇所と内容を出力する画面をポップアップさせるようにしておくとデバッグが楽です。
方法としては、エラー内容レポート用の標準モジュールを用意しておき、エラートラップから当該モジュールを呼ぶというきわめて原始的な方法です。
エラーレポート用モジュール
ErrorFunction.bas
Option Explicit
Public Sub displayError( _
plErrNum As Long, _
psErrDesc As String, _
psErrApl As String, _
psErrModule As String, _
psErrProc As String, _
Optional pvErrNote As Variant)
On Error Resume Next
Dim sBuffer As String
If IsMissing(pvErrNote) = False Then
sBuffer = "エラーが発生しました。" & vbCrLf & _
"エラー番号" & vbTab & vbTab & ":" & Space(1) & CStr(plErrNum) & vbCrLf & _
"エラー内容" & vbTab & vbTab & ":" & Space(1) & psErrDesc & vbCrLf & _
"プロジェクト名" & vbTab & vbTab & ":" & Space(1) & psErrApl & vbCrLf & _
"モジュール名" & vbTab & vbTab & ":" & Space(1) & psErrModule & vbCrLf & _
"プロシージャ名" & vbTab & vbTab & ":" & Space(1) & psErrProc & vbCrLf & _
"備考" & vbTab & vbTab & ":" & Space(1) & pvErrNote & vbCrLf
Else
sBuffer = "エラーが発生しました。" & vbCrLf & _
"エラー番号" & vbTab & vbTab & ":" & Space(1) & CStr(plErrNum) & vbCrLf & _
"エラー内容" & vbTab & vbTab & ":" & Space(1) & psErrDesc & vbCrLf & _
"プロジェクト名" & vbTab & vbTab & ":" & Space(1) & psErrApl & vbCrLf & _
"モジュール名" & vbTab & vbTab & ":" & Space(1) & psErrModule & vbCrLf & _
"プロシージャ名" & vbTab & vbTab & ":" & Space(1) & psErrProc & vbCrLf
End If
Call MsgBox(sBuffer, vbCritical + vbOKOnly)
End Sub
エラー呼び出し側モジュール
hoge.bas
Option Explicit
Private Const msMODULE_NAME = "hoge.bas" as String
Public Sub hoge
On Error GoTo ErrTrap
Const sPROC_NAME = "hoge" as String
'+ 処理内容を書く
EndProc:
Exit Sub
ErrTrap:
Call ErrorFunction.displayError(Err.Number, Err.Description, Err.Source, msMODULE_NAME, sPROC_NAME)
GoTo EndProc
End sub