VB6:“On Error Goto 0”会影响调用函数的错误处理程序吗?

时间:2010-06-22 05:31:45

标签: vb6 error-handling

如果在VB6 Sub中调用了On Error Goto 0,即使控制权返回到调用函数/ Sub,它也会关闭错误处理吗?

编辑:如果我在错误处理程序块中输出错误号为0,那表示什么?

3 个答案:

答案 0 :(得分:3)

没有。 On Error Goto 0On 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,因为没有发生错误。