On Error Goto が2回目から効かない

解決


ちょろ  2007-05-14 16:29:20  No: 98753

Forループ内で発生したエラーをOn Error Gotoで処理して、Nextで次ループを実行させ、またエラーが発生したときに、On Error が効きません。On Errorをループの中に書いても外に書いても同じです。なぜでしょうか。教えてください。


魔界の仮面弁士  2007-05-14 18:17:15  No: 98754

エラー処理ルーチンから、再度エラー処理を行う事はできません。
On Error Resume ステートメントでエラー復帰させるか、
On Error GoTo 0 でエラートラップを解除する必要があります。

詳細は、VB6 ヘルプの下記の項をご覧ください。

[Visual Basic ドキュメント]
└[Visual Basic の使用方法]
  └[プログラミング ガイド]
    └[Visual Basic を使ってできること]
      └[コードのデバッグおよびエラー処理]


ちょろ  2007-05-14 19:00:03  No: 98755

回答ありがとうございます。
簡単に書くと下記のような感じなんですけど、これでもダメなんですが、どうしてなんでしょう・・・。

Function ・・・・
 for  ・・・
   On Error Goto 0
   On Error Goto ErrLabel

   エラーが発生する行
nextLabel:
 next

ErrLabel:
  エラーログ出力
  goto nextLabel
End Function


GOD  2007-05-14 21:02:50  No: 98756

MSDNに書かれている通りエラー処理ルーチンがアクティブの時はエラーが処理できないためです。
For文の中の処理をプロシージャー化するかResume を使ってください。
Private Sub Command1_Click()
    Dim i As Long

    For i = 0 To 100
On Error GoTo ErrHandle
        If i Mod 2 = 0 Then
            Err.Raise &H80000000
        End If

ErrHandle:
        If Err.Number <> 0 Then
            'エラー処理
            Resume NextLoop
        End If
NextLoop:
    Next
End Sub

Private Sub Command2_Click()
    Dim i As Long

    For i = 0 To 100
        Call sbTest(i)
    Next
End Sub

Private Sub sbTest(cnt As Long)
On Error GoTo ErrHandle
    If cnt Mod 2 = 0 Then
        Err.Raise &H80000000
    End If
ErrHandle:
    If Err.Number <> 0 Then
        'エラー処理
    End If
End Sub


ちょろ  2007-05-16 14:33:48  No: 98757

Resume!ありがとうございました!


※作成する前に利用規約をご確認ください。

※Google reCAPTCHA認証からCloudflare Turnstile認証へ変更しました。







   このエントリーをはてなブックマークに追加