VBA读取JSON时timestamp可正常获取,rate取值报错的解决咨询
解决VBA中获取JSON小写"rate"属性的问题
你碰到的这个问题完全是VBA的大小写自动转换特性搞的鬼!当你用点号访问JScript对象的属性时,VBA会自动把属性名改成首字母大写的格式,而API返回的JSON里rate是全小写的,所以你写oJSON.rates.EURUSD.rate时,VBA实际在找Rate属性——对象里根本没有这个属性,自然就触发了438错误。
下面给你两个简单的解决办法:
方法1:用方括号+字符串索引精准访问
这是最直接的方案,跳过VBA的自动大小写转换,用方括号包裹字符串形式的属性名,直接指定要访问的小写rate:
MsgBox oJSON.rates.EURUSD("rate")
这样就能准确获取到你要的汇率值了,亲测有效。
方法2:在JScript层面提前处理属性名
如果你更习惯用点号访问,可以在解析JSON的时候,手动给对象添加一个首字母大写的Rate属性,指向原来的小写rate:
Set oJSON = scriptControl.Eval("(function(){var data = " + .responsetext + "; data.rates.EURUSD.Rate = data.rates.EURUSD.rate; return data;})()")
之后你就可以用MsgBox oJSON.rates.EURUSD.Rate来访问了,不过这个方法比第一种繁琐一些,更适合需要批量处理属性名的场景。
另外提个小建议:MSScriptControl在64位Office版本里可能存在兼容性问题,如果后续遇到运行报错,可以试试专门的VBA JSON解析库(比如VBA-JSON),这类工具对JSON属性名的大小写处理更严谨,也更适合解析复杂结构的JSON数据。
内容的提问来源于stack exchange,提问作者ZygD
相关产品推荐
相关产品推荐

