退出功能前的“On Error Goto 0”

时间:2012-05-01 08:07:44

标签: vb6 error-handling

MzTools中的默认错误处理程序模板是:

On Error GoTo {PROCEDURE_NAME}_Error

    {PROCEDURE_BODY}

   On Error GoTo 0
   Exit {PROCEDURE_TYPE}

{PROCEDURE_NAME}_Error:

    MsgBox "Error " & Err.Number & " (" & Err.Description & ") in procedure {PROCEDURE_NAME} of {MODULE_TYPE} {MODULE_NAME}"

请注意,On Error Goto 0直接放在Exit语句之前。这样做有什么意义?这似乎是多余的。当函数退出时,函数的错误处理程序将关闭。

2 个答案:

答案 0 :(得分:3)

on error goto 0在当前范围内关闭 off 错误处理,并恢复为默认情况。

在这个例子中,该过程希望错误处理程序在函数持续时间内处于活动状态,但它希望在退出时关闭它。如你所说,在这种情况下没有必要,因为错误处理程序的范围是{PROCEDURE_TYPE}所以它将在退出时被还原。

但有时候,编码员(特别是那些生成模板的人)喜欢自己清理,即使在技术上没有必要,比如在退出之前在C程序中释放已分配的内存。

这就是我怀疑的情况,它确实只是假设

答案 1 :(得分:3)

这不是关闭当前错误处理程序,而是关闭清除Err对象。

试试这个

Option Explicit

Private Sub Command1_Click()
    pvTest
    MsgBox Err.Description
End Sub

Private Sub pvTest()
    On Error Resume Next
    Debug.Print 1 / 0
'    On Error GoTo 0
End Sub

然后删除注释行。