在错误处理程序中,您最好使用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
或在错误处理程序中添加更多代码。
Again:
处再加一个On Error
。 - Ňɏssa Pøngjǣrdenlarp