对于VBA中的某种“最终”阻止,这会是一种切实可行的方法吗?

时间:2017-03-04 18:46:50

标签: vba error-handling

此样本取自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

0 个答案:

没有答案