CVErr函数错误处理问题:自定义错误2001无法返回的修复求助
修复VBA自定义错误返回问题
你的代码中使用CVErr(2001)返回的是Excel内置错误(对应“取消操作”错误),并非真正的自定义错误。VBA规定,用户自定义错误编号必须基于vbObjectError(值为-2147221504),且需要加上一个大于等于512的偏移量(避免与系统内置错误冲突)。
修改后的函数代码
Function CalculateDouble(Number) If IsNumeric(Number) Then CalculateDouble = Number * 2 ' 返回计算结果 Else ' 使用vbObjectError + 自定义编号(示例用1001,可自行调整) CalculateDouble = CVErr(vbObjectError + 1001) End If End Function
关键说明
- 自定义错误编号推荐从
vbObjectError + 512开始,比如vbObjectError + 1001、vbObjectError + 2000等,只要不重复即可。 - 如果需要在VBA代码中捕获并识别这个自定义错误,可以在调用函数的过程中添加错误处理:
Sub TestCalculateDouble() Dim result As Variant On Error Resume Next result = CalculateDouble("非数字") If Err.Number <> 0 Then ' 判断是否是自定义错误 If Err.Number = vbObjectError + 1001 Then MsgBox "自定义错误:输入不是有效数字", vbCritical Else MsgBox "其他错误:" & Err.Description, vbExclamation End If Err.Clear End If End Sub - 若在Excel单元格中直接使用该函数,单元格会显示
#VALUE!,但通过VBA错误处理逻辑可以明确识别这是你定义的自定义错误类型。
内容的提问来源于stack exchange,提问作者Andrei
相关产品推荐
相关产品推荐

