VBAでエラー処理を行う

マクロ実行時にエラーが発生し落ちないようにします。

エラーログを作成しておくと後からでも確認できて便利です。


まず、エラーを発生させるためのサンプルを作成しました。

以下のコードは0の除算で必ずエラーになります。

このログに記載されるのはエラーの発生年月日、時間、エラー番号と内容です。

Sub わざとエラーを起こす()
'
    'エラーが発生したら myError に飛ばす
    On Error GoTo myError
    '
    Range("A1") = 10 / 0
    '
    '通常の処理の最後には必ず Exit Sub を入れる
    Exit Sub
    '
myError:
    '情報を引数に入れて渡す
    Call エラーログ作成( _
    Format(Now, "YYYY/MM/DD") & Format(Now, "HH:NN:SS") & vbNewLine & _
    "エラー番号 :" & Err.Number & vbNewLine & _
    "エラー内容 :" & Err.Description & vbNewLine _
    )
    MsgBox "マクロ内でエラーが発生しました。" & vbNewLine & _
    "詳細はerror.logをご確認ください。", _
    vbExclamation
'
End Sub


次にエラーログを作成するマクロを記述します。

上記のマクロでエラーが発生すると、必要事項を渡された以下のマクロが呼び出されてログを作成します。

Sub エラーログ作成(ByVal errMsg As String)
'
    Dim myFSO As Object
    Dim newLog As String
    '
    Set myFSO = CreateObject("Scripting.FileSystemObject")
    newLog = ThisWorkbook.Path & "\error.log"
    '
    With myFSO
        'ログファイルがなければ作成
        If Not .FileExists(newLog) Then .CreateTextFile (newLog)
        '
        With .OpenTextFile(newLog, 8) '追加して書き込む
            .WriteLine errMsg
            .Close
        End With
    End With
    Set myFSO = Nothing
End Sub


上記のコードの場合は以下のような形になります。

2019/02/01 23:09:46
エラー番号 : 11
エラー内容 : 0 で除算しました。


以上です。

業務tips保管庫

ちょっとした工夫で日々の業務を少しだけ楽にする。

0コメント

  • 1000 / 1000