错误处理 – VB6处理错误处理程序中的错误

我有这样的代码,所以当第一次引发错误(c = 1/0)然后进入错误句柄,之后进入再次a如果出现引发错误而不是app崩溃,不会出错处理程序,任何想法如何解决这个问题?

On Error GoTo ErrorHandler
   maxretry=3
   c=1/0
Again:
     c=a/b
ErrorHandler:
      if maxretry>0 then
          maxretry=maxretry-1
          goto Again

       end if

最佳答案
你宁愿在错误处理程序部分使用RESUME而不是GOTO:

On Error GoTo ErrorHandler
   maxretry=3
   c=1/0
Again:
     c=a/b
ErrorHandler:
      if maxretry>0 then
          maxretry=maxretry-1
          Resume Again

       end if

使用RESUME将重置内部错误处理程序标志并重新进入其中(排序).

Resume Again告诉VB6在标记为Again的行上继续执行代码(在处理错误之后):

您还可以使用Resume Next,它告诉VB6在导致错误的指令之后的下一条指令处继续.

如果您想重试您的操作,则必须添加另一个标签并更新您应该看起来像这样的代码:

On Error GoTo ErrorHandler

    ' Max number of tries.
    maxretry = 3

Retry:
    c = 1 / 0

NoMoreTry:
    c = a / b

Exit Sub
' or Exit Function
' to avoid entering error handler because we don't need to

ErrorHandler:
    If (maxretry > 0) Then
        maxretry = maxretry - 1
        ' Try again, resume execution to "Retry" label.
        Resume Retry
    End If
    ' Tried 3 times, resume execution to "NoMoreTry" label.
    Resume NoMoreTry

请注意,在这种特殊情况下,如果你的b变量等于0,你可能会有一个无限循环,因为当c = a / b将失败时,它会转到错误处理程序,它将继续执行到NoMoreTry,然后失败,……等等……

为避免这种情况,您可以在NoMoreTry之后立即使用On Error Resume Next,或在错误处理程序中添加更多代码.

转载注明原文:错误处理 – VB6处理错误处理程序中的错误 - 代码日志