VBA运行时错误'13'类型不匹配:读取JSON字段nonVariableListPrice报错
错误原因
- 该报错和JSON转换器无关,是代码遍历逻辑和返回的JSON结构不匹配导致的:你调用其他API时返回的是JSON数组,VBA-JSON会解析为集合,遍历集合拿到的是每个子对象(字典类型),所以不会报错;但本次API返回的JSON根节点是单个字典对象,不需要嵌套循环遍历。
- 你写的
For Each item41 In Json61遍历的是字典的键名(字符串类型),尝试对字符串调用item41("nonVariableListPrice")自然触发类型不匹配错误。
修正方案
把你原来从For Each check41 In Json61开始的整段循环替换为以下代码即可:
' 直接判断字典中是否存在目标键,无需遍历 If Json61.Exists("nonVariableListPrice") Then ' 加CDbl转换避免格式问题,同时处理空值 home3.Cells(vp, 8).Value = CDbl(Json61("nonVariableListPrice")) Else home3.Cells(vp, 8).Value = "NO DATA" End If vp = vp + 1
额外优化建议
- 如果后续遇到返回JSON根节点是数组的场景,才需要用
For Each遍历集合中的每个字典对象 - 可以在赋值前加
IsEmpty/IsNull判断,避免后续出现1004赋值错误 - 建议每次调用完API后先判断返回的HTTP状态码是否为200,再做JSON解析,避免解析无效响应内容出错
内容的提问来源于stack exchange,提问作者Raiden Choong
相关产品推荐
相关产品推荐

