そういうサイトには、例として、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 件のコメント:
コメントを投稿