Public Sub MyTest()
On Error GoTo MyTest_Error
On Error GoTo 0 '这一句放在这里是什么意思?
Exit SubMyTest_Error: MsgBox "Error " & Err.Number & " (" & Err.Description & _
") in procedure MyTest of User Control ShapeLabel"
End Sub
上面是MZ-Tools自动生成的错误处理代码,请问On Error GoTo 0放在Exit Sub之前是有什么意思么?Exit Sub不就自动终止错误处理了么?又或者是允许在On Error GoTo 0和Exit Sub之间加一些代码?那为何要终止错误捕捉?总之吧,在这里安排一句停止错误捕捉是什么意思啊?
On Error GoTo MyTest_Error
On Error GoTo 0 '这一句放在这里是什么意思?
Exit SubMyTest_Error: MsgBox "Error " & Err.Number & " (" & Err.Description & _
") in procedure MyTest of User Control ShapeLabel"
End Sub
上面是MZ-Tools自动生成的错误处理代码,请问On Error GoTo 0放在Exit Sub之前是有什么意思么?Exit Sub不就自动终止错误处理了么?又或者是允许在On Error GoTo 0和Exit Sub之间加一些代码?那为何要终止错误捕捉?总之吧,在这里安排一句停止错误捕捉是什么意思啊?
在错误未发生的时候,为了防止错误处理程序代码运行,请像在下段程序中那样,在紧靠着错误处理程序的前面写入 Exit Sub、Exit Function 或 Exit Property 语句。
Sub InitializeMatrix(Var1, Var2, Var3, Var4)
On Error GoTo ErrorHandler
. . .
Exit Sub
ErrorHandler:
. . .
Resume Next
End Sub
此处,错误处理程序代码在 Exit Sub 语句之后,而在 End Sub 语句之前,从而与过程中的流程分开。错误处理程序代码可以在程序中的任何地方写入。
从以上MSDN中的说明来看:
Public Sub MyTest()
On Error GoTo MyTest_Error
...
On Error GoTo 0 '这一句写不写两可
Exit SubMyTest_Error:
MsgBox "Error " & Err.Number & " (" & Err.Description & _
") in procedure MyTest of User Control ShapeLabel"
End Sub
---------------------------------------------------------------
Public Sub MyTest()
On Error GoTo MyTest_Error
...
On Error GoTo 0 '如果有错误发生,肯定在这句以上的语句,便于调试
...
Exit SubMyTest_Error:
MsgBox "Error " & Err.Number & " (" & Err.Description & _
") in procedure MyTest of User Control ShapeLabel"
End Sub
''仅仅捕捉这两句之间的语句导致的错误。
''比如磁盘未就绪、文件路径不存在之类的错误
On Error GoTo 0
''这以下的语句不管了
''这以下可能都是在内存做一些简单处理,不操作外部设备,不会出错,就不捕捉了
表示以后发生的错误当前过程不捕获,必须由调用者进行处理。
通常是通过 Err.Raise 方式向调用者抛出错误。
Public Sub MyTest()
On Error GoTo MyTest_Error
On Error GoTo 0 '这一句放在这里是什么意思?
Err.Raise 555 '有什么必要特地在这里抛出去呢?
Exit SubMyTest_Error:
Err.Raise 555 '如果Err.Raise放在这里本来就是抛到调用堆栈的上一层去了吧?
MsgBox "Error " & Err.Number & " (" & Err.Description & _
") in procedure MyTest of User Control ShapeLabel"
End Sub
如果Err.Raise放在本身的错误处理程序的话,本来就是抛到调用堆栈的上一层去了;有什么必要把抛出异常安排在 On Error GoTo 0和Exit Sub之间呢?