Excel VBA自定义TRAVELTIME函数出现#NAME?错误求助
解决TRAVELTIME函数返回#NAME?错误的方案
首先看你工作表里的调用公式:=traveltime(orgin, destination, apikey),这里第一个参数拼写错误了——函数定义里的参数是origin,但你写成了orgin(少了一个字母i),这是导致#NAME?的直接原因,先把这个拼写改过来。
如果改完还是报错,排查下面这些点:
- 确认宏已启用:打开工作簿时如果弹出宏禁用提示,必须选择启用宏,否则自定义函数无法运行。
- 检查JsonConverter模块:确保
JsonConverter.bas文件已正确添加到VBA工程(在VBA编辑器的工程窗口能看到该模块),且模块没有编译错误。 - 核对函数位置:确认函数确实在标准模块(模块1)中,而非工作表模块;如果误放在工作表模块,调用时需要加上工作表前缀,比如
=Sheet1!TRAVELTIME(...)。 - 调整宏安全设置:若Excel宏安全级别过高,会阻止自定义函数执行,可在「文件-选项-信任中心-信任中心设置-宏设置」中临时调整为「启用所有宏」(测试完成后记得调回安全级别)。
另外,你的函数代码可以做几个优化,避免后续其他报错:
- 在模块开头添加
Option Explicit,强制变量声明,提前发现拼写类错误。 - 给
httpReq变量声明类型:Dim httpReq As Object。 - 增加API返回错误的处理逻辑,避免无路线数据时崩溃:
If Not parsed.Exists("routes") Or parsed("routes").Count = 0 Then TRAVELTIME = "无路线数据" Exit Function End If
内容的提问来源于stack exchange,提问作者Washington state one
相关产品推荐
相关产品推荐

