VB6:Dos";错误转到“0”时;是否影响调用函数的错误处理程序?

VB6:Dos";错误转到“0”时;是否影响调用函数的错误处理程序?,vb6,error-handling,Vb6,Error Handling,如果在VB6子系统中调用了关于错误转到0的,,那么即使控件返回到调用函数/Sub,是否也会关闭错误处理 编辑:如果我在错误处理程序块中有一个显示错误号为0的输出,这表示什么?否 当程序遇到错误时,Visual Basic 检查当前是否安装了错误处理程序 在当前的例行程序中。如果是这样,控制传递给该错误处理程序。 如果没有有效的错误处理程序,则Visual Basic将移动 将调用堆栈升级到调用例程,查看 错误处理程序当前安装在那里。如果是,, 系统将在该错误处理程序处恢复执行。 如果调用例程中

如果在VB6子系统中调用了关于错误转到0的
,那么即使控件返回到调用函数/Sub,是否也会关闭错误处理

编辑:如果我在错误处理程序块中有一个显示错误号为0的输出,这表示什么?

当程序遇到错误时,Visual Basic 检查当前是否安装了错误处理程序 在当前的例行程序中。如果是这样,控制传递给该错误处理程序。 如果没有有效的错误处理程序,则Visual Basic将移动 将调用堆栈升级到调用例程,查看 错误处理程序当前安装在那里。如果是,, 系统将在该错误处理程序处恢复执行。 如果调用例程中未安装错误处理程序 或者,VisualBasic继续向上移动调用堆栈 直到找到安装了错误处理程序的例程。 如果它在找到一个 激活错误处理程序后,程序崩溃。 否。错误转到0时的
仅影响当前过程:

出错时转到0
禁用任何已启用的 当前数据库中的错误处理程序 程序

编辑现在这个问题增加了一个选项,我发布这个答案时没有。问题是“如果我在错误处理程序块中有一个显示错误号为0的输出,这表示什么?”。有关答案,请参阅

如果我在错误处理程序块中有一个显示错误号为0的输出,这表示什么

这意味着
Err
对象在您检查
Err.Number
属性的代码点不包含错误信息。发生这种情况的原因有很多:

  • 先前调用
    Err.Clear
  • 通过调用错误转到时的
    清除
    Err
    对象。
    On Error Goto
    语句将清除当前的
    Err
    对象
  • Err
    对象被
    Resume X
    语句清除。与正常的
    Goto X
    语句不同,
    Resume
    将清除当前的
    Err
    对象(如果
    Err
    对象已为空,则会引发自身的错误)
  • 在到达错误处理程序之前,您忘记退出当前的
    /
    函数
    /
    属性
    ,例如:

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

您的引用是正确的,但它实际上没有回答问题。答案是“否”,引用只是一种解释(基本上,错误处理程序的范围是一个过程,所有被调用的过程都没有安装自己的错误处理程序)。但我认为这句话说得更好。。。
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