如何在VBA中重新抛出错误

Kap*_*apé 5 excel vba

发生错误时,我想进行一些清理,然后让错误继续传播,以便全局处理。

在C#中,我会执行a,try finally但仅在VBA中无法做到On Eror GoTo <mylabel>

当卡在标签中时,如何正确地重新抛出错误?

是否只能使用所有属性再次调用Err.Raise,不throw存在like关键字?:

Err.Raise Err.Number, Err.Source, Err.Description, Err.HelpFile, Err.HelpContext
Run Code Online (Sandbox Code Playgroud)

dav*_*vid 5

这是正确的方法,但是不,您不必重新声明所有 err 属性。保留这些值:

err.raise Err.Number
Run Code Online (Sandbox Code Playgroud)

是相同的

Err.Raise Err.Number, Err.Source, Err.Description, Err.HelpFile, Err.HelpContext
Run Code Online (Sandbox Code Playgroud)

https://learn.microsoft.com/en-us/office/vba/Language/Reference/user-interface-help/raise-method

如果你抛出一个类模块,它可能会更复杂。默认情况下,类模块的 err 对象被捕获并重新创建,因此根据它的声明方式,属性可能会被替换。


BR_*_*ner -2

我认为你应该使用 ON ERROR GOTO ...

并在“next_step”中继续进行错误处理

例如:

Sub test()
    'IF OCCOUR ERROR INSIDE THIS BLOCK THE ERROR CONTINUE IN "next_step"
    On Error GoTo next_step

    If Err.Number = 10 Then
        Msgbox"Error!"
    End If

    next_step:
    'YOU CAN CONTINUE YOUR CODE HERE!!

End Sub
Run Code Online (Sandbox Code Playgroud)