Excel VBA中UDF名称含数字报错:为何map2()出现#REF错误?
Excel 2013 VBA自定义函数#REF!错误原因分析
问题场景
你在Excel 2013中创建了以下VBA自定义函数:
Function map() As Integer map = 1 End Function Function map_2() As Integer map_2 = 1 End Function Function map2() As Integer map2 = 1 End Function
其中map()和map_2()可正常运行,但map2()返回#REF!错误。后续测试发现,不带下划线的字母+数字组合命名(如map22()、mpa22()、map333())均报错,带下划线的命名(map_22()、map_333())则正常。
原因解析
这是Excel的名称解析规则导致的:
- Excel会优先将字母开头、后跟数字且无下划线分隔的名称,识别为A1样式的单元格引用格式(类似
A1、B2这类列标+行号的组合)。即使你定义了同名的VBA自定义函数,Excel也会优先尝试解析为单元格地址,当无法找到对应单元格时,就返回#REF!错误。 - 带下划线的命名(如
map_2)因为下划线打破了“纯字母+数字”的单元格引用格式,Excel不会将其误判为单元格地址,因此可以正常调用对应的自定义函数。
验证方式
你可以通过以下操作确认:
- 打开Excel“公式”选项卡的「名称管理器」,检查是否存在与报错函数同名的预设名称;
- 在单元格输入
=map2()时,观察Excel的自动提示,它会优先显示单元格引用相关的提示,而非你的自定义函数。
内容的提问来源于stack exchange,提问作者Andrey
相关产品推荐
相关产品推荐

