【发布时间】:2022-01-14 13:42:20
【问题描述】:
我正在尝试创建一个集中式错误处理程序。我按照推荐使用 vbObjectError 。但我不知道如何编写一个条件来确定我的错误是原生的还是自定义的。
即使我稍后将其他自定义错误添加到枚举中,所需的 IsCustomErr 也应该可以正常工作。
Enum CustomEr
LaidEgg = vbObjectError
UserEaten
Paused
Cancelled
End Enum
Sub Test
On Error Goto HANDLER
Err.Raise LaidEgg
Exit Sub
HANDLER:
GlobalHandler
End Sub
Sub GlobalHandler
If IsCustomErr Then MsgBox "Custom"
End Sub
Function IsCustomErr()As Boolean
' ONE OF THESE?
With Err
IsCustomErr = .Number < 0
IsCustomErr = .Number >= vbObjectError
IsCustomErr = (.Number >= vbObjectError) And (.Number < 0)
IsCustomErr = .Number Or vbObjectError
IsCustomErr = TwosComplement(.Number) Or TwosComplement(vbObjectError)
End With
End Function
【问题讨论】:
-
添加一个如何引发自定义错误的示例可能很有用
-
@TimWilliams 完成。
-
为什么不
IsCustomErr = (.Number = CustomEr.LaidEgg)? -
@TimWilliams Thx,但您只是将一个错误硬编码到您的代码中。该函数应该适用于 所有 自定义错误(即使稍后添加更多错误)。
-
好的,然后可以在“枚举 VBA 枚举”下查看这里 - analystcave.com/vba-enum-using-enumerations-in-vba
标签: excel vba error-handling custom-errors custom-error-handling