No *_*ame 3 vb6 error-handling
我有这样的代码,所以当第一次引发错误(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
Run Code Online (Sandbox Code Playgroud)
使用RESUMEwill,sort,重置内部错误处理程序标志并让你重新进入它(有点).
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
Run Code Online (Sandbox Code Playgroud)
请注意,在这种特殊情况下,如果你的b变量等于0,你可能会有一个无限循环,因为它c = a / b会失败,然后它会转到错误处理程序,它将继续执行到NoMoreTry,然后失败,... . 等等...
为避免这种情况,您可以On Error Resume Next在NoMoreTry之后立即使用,或在错误处理程序中添加更多代码.