VBA中对象Let属性自定义运行时错误信息不生效问题
VBA自定义属性错误未显示自定义描述的解决办法
问题背景
在Excel for Mac 16.78.3中,编写VBA类模块的Let属性时,尝试在参数非法时触发带自定义编号和描述的运行时错误,但实际触发的是通用自动化错误,自定义的错误编号和描述未显示。错误提示原文翻译为:
运行时错误'440': 自动化错误
涉及代码如下:
类模块myPerson
Private m_Age As Integer Property Let Age(yearsOld As Integer) If yearsOld >= 0 Then m_Age = yearsOld Else Err.Clear '清空之前的错误状态 Err.Raise Number:=vbObjectError + 513, Source:="Book1.myPerson.LetAge", Description:="Positive integer required" End If End Property Property Get Age() As Integer Age = m_Age End Property
普通模块Module1
Sub use_myPersonClass() Dim aPerson As myPerson Set aPerson = New myPerson aPerson.Age = -1 '触发错误但未显示自定义信息 End Sub
关键说明:关于vbObjectError + 513
微软VBA规范中,自定义对象错误的编号必须在vbObjectError + 512到vbObjectError + 65535范围内,vbObjectError的值为-2147221504,加上513是为了避免与系统内置错误编号冲突,你的写法符合规范。
问题原因
Mac版Excel的VBA运行环境在未主动捕获错误时,会将自定义对象抛出的错误转换为通用的“自动化错误(440)”,不会直接展示自定义的错误编号和描述。
解决方法
在调用代码中添加错误捕获逻辑,手动获取并展示自定义错误信息,修改后的普通模块代码如下:
Sub use_myPersonClass() Dim aPerson As myPerson Set aPerson = New myPerson On Error GoTo ErrorHandler '启用错误捕获 aPerson.Age = -1 '触发自定义错误 ExitSub: Set aPerson = Nothing Exit Sub ErrorHandler: '弹窗显示完整的自定义错误信息 MsgBox "错误编号: " & Err.Number & vbCrLf & _ "来源: " & Err.Source & vbCrLf & _ "描述: " & Err.Description, vbCritical, "自定义属性错误" Resume ExitSub End Sub
补充说明
- Windows版Excel VBA通常会在开发环境中直接弹出包含自定义信息的错误提示,但Mac版目前需要通过手动捕获来展示。
- 若需要在错误提示中显示中文描述,可将
Description参数改为中文,比如Description: "请输入非负整数"。
内容的提问来源于stack exchange,提问作者nunof34
相关产品推荐
相关产品推荐

