You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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宏安全级别过高,会阻止自定义函数运行:

  1. 打开Excel选项,进入「信任中心」>「信任中心设置」>「宏设置」
  2. 暂时选择「启用所有宏」或「启用无数字签署的所有宏」测试(测试完成后可改回安全设置,并将文件添加到信任位置)。

5. 验证引用有效性

尽管你已勾选Microsoft XML, 6.0,但引用可能因文件损坏或版本兼容问题失效:

  1. 在VBA编辑器中,进入Tools > References
  2. 取消勾选Microsoft XML, 6.0后重新勾选
  3. 点击「确定」,按Ctrl+F5编译代码,确保无报错。

完成以上步骤后,回到Excel单元格重新输入=Co_Ordinates(K12)即可正常运行。

内容的提问来源于stack exchange,提问作者Bert Onstott

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.18 17:43:14