如何处理 class 中的 VBA 错误?

How to deal with VBA error inside of a class?

我很难找到处理自定义 class 内部意外错误的正确方法。如果我的 classes 中的任何一个出现错误,都会导致应用程序彻底失败。如果 class 对象已成功实例化,我似乎无法找出将错误传递回调用过程的最佳方法。

假设我尝试将 class 中某人的年龄设置为 Person.age=21,但 Property Let 代码中存在错误。如何捕获意外错误并将其返回给调用过程?那我想优雅的失败。

我使用 MS Access 在 MS Excel 中做一堆报告,如果我的应用程序遇到意外错误并失败,它会打开隐藏的 MS Excel 工作簿。我想捕获这些错误,然后关闭所有内容,以免挂起任何东西。

我真的不需要特定的代码,因为我需要的是想法、思维过程或正确的程序顺序。

PS: 我的大部分子程序、函数和属性都有错误处理

VBA 错误处理是这样的:

Public Sub DoSomething()
    On Error GoTo ErrHandler

    'Do some stuff...

    Exit Sub

    ErrHandler:
       MsgBox Err.Number & ": " & Err.Description, vbOKOnly, "Error"
End Sub

基本上有两种选择:

1) 引发从您的 class 代码到调用代码的错误(也许只有在尝试处理您的 class 中的错误但失败后才这样做)。如果您重新提出错误,那么您应该考虑添加相关的错误消息,这可能有助于调用者找出问题所在。

2) 吞下你的 class 方法中的所有错误,并使用其他方式向调用代码指示出现问题的代码(例如有一个布尔值 属性 "OK" 在你的 class 中,调用代码可以检查以确保在你的 class 中调用的任何方法期间一切正常。

第一个选项可能是首选方式,尽管这当然是一个偏好问题,并且会受到影响,例如,您是否是唯一一个针对您的 class 编写代码的人。