LoginSignup
10
18

More than 5 years have passed since last update.

Excel VBAでのエラー処理

Last updated at Posted at 2015-08-15

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
10
18
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
10
18