如果在VB6 Sub中调用了On Error Goto 0
,即使控制权返回到调用函数/ Sub,它也会关闭错误处理吗?
编辑:如果我在错误处理程序块中输出错误号为0,那表示什么?
答案 0 :(得分:3)
没有。 On Error Goto 0
仅On Error Goto 0
影响当前程序:
{{1}}禁用任何已启用的功能 当前的错误处理程序 过程
编辑现在有一个问题的补充,当我发布这个答案时,它不存在。问题是“如果我在错误处理程序块中输出显示错误编号为0,那表示什么?”。有关答案,请参阅VB6 manual makes it clear
答案 1 :(得分:2)
没有
http://www.vb-helper.com/tut6.htm
When a program encounters an error, Visual Basic checks to see if an error handler is presently installed in the current routine. If so, control passes to that error handler. If no error handler is in effect, Visual Basic moves up the call stack to the calling routine to see if an error handler is currently installed there. If so, the system resumes execution at that error handler. If no error handler is installed in the calling routine either, Visual Basic continues moving up the call stack until it finds a routine with an error handler installed. If it runs off the top of the stack before it finds an active error handler, the program crashes.
答案 2 :(得分:2)
如果我在错误处理程序块中输出错误号为0,那表示什么?
这意味着Err
对象在您检查Err.Number
属性的代码中的点处不包含错误信息。这可能由于多种原因而发生:
Err
Err.Clear
个对象
Err
清除了On Error Goto
对象。 On Error Goto
语句将清除当前的Err
对象Err
对象已被Resume X
语句清除。与普通Goto X
语句不同,Resume
将清除当前Err
对象(如果Err
对象已经为空,则会引发自己的错误)您在到达错误处理程序之前忘记退出当前的Sub
/ Function
/ Property
,例如:
Public Sub SampleRoutine
On Error Goto ErrorHandler
DoSomething
DoSomethingElse
' You need an Exit Sub here so that the code does not reach the error handler'
'in the event no error occurs.'
ErrorHandler:
MsgBox Err.Number & "-" & Err.Description
End Sub
根据我的经验,这是一个非常常见的错误。如果在到达错误处理程序标签之前未显式退出例程,则即使没有错误发生,错误处理程序中的代码仍将运行。在这种情况下,Err.Number
将为0,因为没有发生错误。