2

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 语句之前。这样做有什么意义?似乎是多余的。当函数退出时,函数的错误处理程序无论如何都会关闭。

4

2 回答 2

3

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

在这种情况下,过程希望错误处理程序在函数执行期间处于活动状态,但它希望在退出时将其关闭。正如您所说,在这种情况下没有必要,因为错误处理程序的范围是,{PROCEDURE_TYPE}所以它将在退出时恢复。

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

这就是我怀疑的情况,这实际上只是假设。

于 2012-05-01T08:21:30.317 回答
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

然后删除注释行。

于 2012-05-01T14:14:31.983 回答