如以下示例程序:
Private Sub Command1_Click()
   Dim I As Long
   For I = 1 To 10
      On Error GoTo NextLine
      
      Err.Raise vbObjectError, , "err " & I
      
NextLine:
      If Err.Number <> 0 Then
         Debug.Print Err.Description
      Else
      End If
      On Error GoTo 0
   Next
End Sub似乎应该打印出 err1 err2 err3 .... err10 ,但实际上打印出 err1 以后就会抛出一个未处理的错误而导致程序中止,也就是说第一次捕获到错误以后,错误捕获就无法再次捕获错误了,不知道是什么原因,但是如果把 On Error Goto NextLine 改为 On Error Resume Next,则可以捕获到10个错误,请DX指点怎么回事。

解决方案 »

  1.   

    这样试试:
    Private Sub Command1_Click()
    On Error GoTo NextLine   Dim I As Long
       For I = 1 To 10
       ......
       ......
       Next
       
       exit sub
    NextLine:
       Debug.Print Err.Description
       exit sub   
    End Sub
      

  2.   

    改正如下:
    Private Sub Command1_Click()
       On Error GoTo NextLine
       Dim I As Long
       For I = 1 To 10
          Err.Raise vbObjectError, , "err " & I
          
       NextLine:
          If Err.Number <> 0 Then
             Debug.Print Err.Description
             Next
    End Sub
      

  3.   

    左手兄不对啊,那样的话产生第一个错误就会退出子程序了,而原来程序的意识,是发生错误的时候能够继续循环,直到循环结束。例如循环处理一个记录集,记录集中的某些记录可能会导致异常,但要求能够忽略掉这些错误的记录把其他正确的错误处理完。 wywggggaaaa2000 兄的程序和在下的程序运行结果完全是一样的,问题依旧啊。
      

  4.   

    Option Explicit
    Private Sub Command1_Click()
       Dim I As Long
       I = 1
    myerr:
       Do While I <= 10
          On Error GoTo NextLine
          Err.Raise vbObjectError, , "err " & I
       Loop
    NextLine:
          If Err.Number <> 0 Then
             Debug.Print Err.Description
             I = I + 1
             Resume myerr
             End If
             
    End Sub
      

  5.   

    谢谢 rainstormmaster(rainstormmaster) ,看起来解决问题的关键在于使用 Resume 语句,不过 rainstormmaster(rainstormmaster)  的程序结构也太复杂了,我整理一下:Private Sub Command1_Click()
       Dim I As Long
       For I = 1 To 10
          On Error GoTo NextLine
          
          Err.Raise vbObjectError, , "err " & I
          
    NextLine:
          If Err.Number <> 0 Then
             Debug.Print Err.Description
             Resume ErrResume
          End If
    ErrResume:
       Next
    End Sub可以结分了。