2018年11月12日月曜日

エラーハンドリング

 ググっていて結構嘘が書いてあるのが On Error GoTo は一回しか効かないというもの。
 そういうサイトには、例として、On Error GoTo でエラーハンドラーに飛ばして、「GoTo ResumePoint」という形で制御を戻すと、エラーが2回目だとそこで止まっちゃうとか書いてあって、やってみると確かに止まります。
 でも、VBAのリファレンスを読むと「プロシージャ内でエラーがエラー ハンドラーにより処理された後、 Resume ステートメントで指定されたポイントから、現在のプロシージャで実行が再開されます。」って書いてあるので、「Resume ResumePoint」と書いてみると、何回でも On Error GoTo でエラーハンドラーへちゃんとジャンプします。

サンプルコード

    Sub ErrorCatch()
        On Error GoTo AbEnd
        Dim i As Integer

    ResumePoint:
        Err.Raise 800, "Test", "Error Test"    ''強制的にエラーを発生させる
        Exit Sub
        
    AbEnd:
        If Err.Number = 800 Then
            If i < 10 Then
                i = i + 1
                Resume ResumePoint    ''Resumeで処理を戻す
            End If
        End If
        MsgBox "エラー回数:" & i & "回" & vbNewLine & _
               "エラー番号:" & Err.Number & vbNewLine & _
               "エラー内容:" & Err.Description
    End Sub

結果


0 件のコメント:

コメントを投稿