VBA-错误转到错误处理程序时:

VBA-错误转到错误处理程序时:,vba,error-handling,Vba,Error Handling,我有一个关于VBA中错误处理的简单问题。 我知道如何使用On Error GoTo ErrHandler语句,但我宁愿使用预制的VBA消息,而不是在指定的标签上使用我自己的代码。C#中的类似内容: 在错误处理程序代码中,您可以访问Err.Number和Err.Description。在没有错误处理的情况下,您可能会看到错误消息中的描述,因此它相当于代码示例中的ex.message。创建一个ErrorHandler模块并将此子模块放入其中 Public Sub messageBox(moduleN

我有一个关于VBA中错误处理的简单问题。 我知道如何使用
On Error GoTo ErrHandler
语句,但我宁愿使用预制的VBA消息,而不是在指定的标签上使用我自己的代码。C#中的类似内容:


在错误处理程序代码中,您可以访问
Err.Number
Err.Description
。在没有错误处理的情况下,您可能会看到错误消息中的描述,因此它相当于代码示例中的
ex.message

创建一个ErrorHandler模块并将此子模块放入其中

Public Sub messageBox(moduleName As String, procName As String, Optional style As VbMsgBoxStyle = vbCritical)
    MsgBox "Module: " & moduleName & vbCrLf & _
        "Procedure: " & procName & vbCrLf & _
        Err.Description, _
        style, _
        "Runtime Error: " & Err.number
End Sub
像这样从项目的任何地方调用它

Private sub Foo()
On Error GoTo ErrHandler

'do stuff

ExitSub:
    ' clean up before exiting
    Exit Sub
ErrHandler:
    ErrorHandler.messageBox "ThisModuleName","Foo"
    Resume ExitSub
End Sub
我使用模块作用域常量来保存模块名称。
修改以满足您的需要。

不客气。vba中的错误处理是一个难题。大量重复的代码。很难看。欢迎来到SO。谢谢@DanWagner。如果我能在运行时自动获取过程名就好了。。。。
Private sub Foo()
On Error GoTo ErrHandler

'do stuff

ExitSub:
    ' clean up before exiting
    Exit Sub
ErrHandler:
    ErrorHandler.messageBox "ThisModuleName","Foo"
    Resume ExitSub
End Sub