如何处理 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 编写代码的人。
我很难找到处理自定义 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 编写代码的人。