Error handling 在错误处理程序中引发VB6句柄错误
我有这样的代码,所以当第一次出现错误(c=1/0)时,它会进入错误句柄,之后它会再次进入,如果出现错误,应用程序就会崩溃,而不是进入错误句柄,你知道如何修复吗 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 关于错误转到错误处理程序 maxretry=3 c=1/0 再一次: c=a/b 错误处理程序: 如果maxretry>0,则 maxretry=maxretry-1 又来了 如果结束 您更愿意在错误处理程序部分使用Error handling 在错误处理程序中引发VB6句柄错误,error-handling,vb6,Error Handling,Vb6,我有这样的代码,所以当第一次出现错误(c=1/0)时,它会进入错误句柄,之后它会再次进入,如果出现错误,应用程序就会崩溃,而不是进入错误句柄,你知道如何修复吗 On Error GoTo ErrorHandler maxretry=3 c=1/0 Again: c=a/b ErrorHandler: if maxretry>0 then maxretry=maxretry-1 goto Again end
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
将重置内部错误处理程序标志,并允许您重新进入该标志(某种)
再次恢复
告诉VB6在标记为的行中恢复代码的执行(错误处理后):
您还可以使用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,则可能有一个无限循环,因为asc=a/b
将失败,然后它将转到错误处理程序,该处理程序将恢复执行NoMoreTry,然后失败。。。等等
为了避免这种情况,您可以在NoMoreTry之后立即使用
On Error Resume Next
,或者在错误处理程序中添加更多的代码。我认为您需要在处再次使用On Error
:在上述代码中,无论c=1/0是否导致异常,c都将始终在块末尾=a/b。。。