Dim errTimes As Integer
    Dim beginTimes As Integer
    
    On Error GoTo err
    errTimes = 1
    beginTimes = 0beginning:
    beginTimes = beginTimes + 1
    Open Text2.Text For Output As #1
    Print #1, Text1.Texterr:
    If errTimes = 3 Then
        MsgBox "errTimes = 3  beginTimes = " + CStr(beginTimes)
        Close #1
    Else
        MsgBox "error"
        errTimes = errTimes + 1
        Close #1
        MsgBox "begin again"
        GoTo beginning
    End If如果text2.text所表示的路径不存在,程序运行第一次可以捕捉到错误,并且跳转到err所指示的地方,可是第二次就直接弹出错误窗口了。这是怎么回事?难道on error goto 不能够捕捉相同的错误吗?

解决方案 »

  1.   

    on error goto 在一个过程中仅第一次起作用,以后的则被忽略掉!
      

  2.   

    在 err:的上一行加一行 Exit Sub
      

  3.   

    知道楼主什么意思可以这样试试看把beginning:放在on error goto 的前面而为了计数可以考虑将变量设为静态的,即把dim换成static
      

  4.   

    这样都去失败之后可以再读而且on error goto 可执行多次
      

  5.   

    如果是使用 On Error Goto …… 处理错误,那么当发生错误并跳转到错误处理以后,当前的错误捕获将失效,直到调用一个 Resume ……
    所以,对于你的程序,把 GoTo beginning 哪一句修改为 Resume Beginning 就可以捕获到三次错误了。
      

  6.   

    同意shwen的意见,如果是使用 On Error Goto …… 处理错误,那么当发生错误并跳转到错误处理以后,当前的错误捕获将失效,直到调用了一个exit sub,exit function,exit property,或者resume...
    所以,对于你的程序,应该把 GoTo beginning 修改为 Resume Beginning,而且在err:前加上exit sub或者goto xxx,否则程序在没发生错误情况下执行到resume语句时会出错。