Excel自定义函数Co_Ordinates未显示及#NAME?报错求助
问题排查与解决
首先明确:宏列表看不到Co_Ordinates是正常情况——自定义函数(UDF)属于工作表函数范畴,宏列表仅显示Sub开头的宏过程,因此无需为此纠结。
下面针对#NAME?错误逐一排查解决:
1. 修复代码中的语法错误
你的代码存在一处变量名错误:在If loc Is Nothing Then分支里,你写了NominatimGeocode = xDoc.XML,但函数名是Co_Ordinates,此处需改为与函数名一致的变量名,否则会导致代码编译失败,Excel无法识别函数。
修正后的完整代码:
Function Co_Ordinates(address As String) As String Application.Caller.Font.ColorIndex = xlNone Dim xDoc As New MSXML2.DOMDocument xDoc.async = False xDoc.Load ("https://nominatim.openstreetmap.org/search?format=xml&q=" + WorksheetFunction.EncodeURL(address)) If xDoc.parseError.ErrorCode <> 0 Then Application.Caller.Font.ColorIndex = vbErr Co_Ordinates = xDoc.parseError.reason Else xDoc.SetProperty "SelectionLanguage", "XPath" Dim loc As MSXML2.IXMLDOMElement Set loc = xDoc.SelectSingleNode("/searchresults/place") If loc Is Nothing Then Application.Caller.Font.ColorIndex = vbErr Co_Ordinates = xDoc.XML ' 此处已修正为函数名 Else Application.Caller.Font.ColorIndex = vbOK Co_Ordinates = loc.getAttribute("lat") & "," & loc.getAttribute("lon") End If End If End Function
2. 确认函数所在模块正确
自定义函数必须放在标准模块中(通过VBA编辑器的Insert > Module新建的模块),不能放在工作表模块(如Sheet1、Sheet2)或ThisWorkbook模块内,否则Excel无法将其识别为全局可调用的工作表函数。
3. 检查文件格式
Excel文件需保存为启用宏的格式:
- Excel 2007及以后版本:保存为
.xlsm格式 - 旧版本:保存为
.xls格式
若保存为普通.xlsx格式,宏与自定义函数会被自动禁用,直接触发#NAME?错误。
4. 调整宏安全设置
若Excel宏安全级别过高,会阻止自定义函数运行:
- 打开Excel选项,进入「信任中心」>「信任中心设置」>「宏设置」
- 暂时选择「启用所有宏」或「启用无数字签署的所有宏」测试(测试完成后可改回安全设置,并将文件添加到信任位置)。
5. 验证引用有效性
尽管你已勾选Microsoft XML, 6.0,但引用可能因文件损坏或版本兼容问题失效:
- 在VBA编辑器中,进入
Tools > References - 取消勾选
Microsoft XML, 6.0后重新勾选 - 点击「确定」,按
Ctrl+F5编译代码,确保无报错。
完成以上步骤后,回到Excel单元格重新输入=Co_Ordinates(K12)即可正常运行。
内容的提问来源于stack exchange,提问作者Bert Onstott
相关产品推荐
相关产品推荐

