发生错误时,我想进行一些清理,然后让错误继续传播,以便全局处理。
在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)
这是正确的方法,但是不,您不必重新声明所有 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)