此样本取自Can I Return From The Current Event Stack In Microsoft Access VBA?
我稍微改了一下,以表明我从阅读上述文章中得到的想法。
当然,通常我根本不会使用GoSub,但在这种情况下,我没有别的办法。
目标是在一个方法中的一个地方清理代码,这个代码将在所有情况下执行,也可以在(重新)引发错误之前执行。
Sub DoSomething()
On Error GoTo CleanFail
Dim fileNumber As Long
fileNumber = FreeFile
'do stuff
'...
CleanExit:
GoSub CleanFinally
Exit Sub
CleanFinally:
On Error Resume Next
Close fileNumber
On Error Goto 0
Return
CleanFail:
If Err.Number = 53 Then
' handle "file not found" error
Resume CleanExit
Else
Dim errNumber As Long
errNumber = Err.Number
GoSub CleanFinally
Err.Raise errNumber ' rethrow
End If
End Sub