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语句之前。这样做有什么意义?这似乎是多余的。当函数退出时,函数的错误处理程序将关闭。
答案 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
然后删除注释行。