对象Vba读取项目

我不能读电影对象,我不知道为什么??,我试图返回一个JSOn API到我的工作表在Excel中,买我不能读电影对象。

Sub getData() Dim Movie As Object Dim R As Object Dim scriptControl As Object Set scriptControl = CreateObject("MSScriptControl.ScriptControl") scriptControl.Language = "JScript" With CreateObject("MSXML2.XMLHTTP") .Open "GET", "https://api.coinmarketcap.com/v1/ticker/shift/", False .send Set R = scriptControl.Eval("(" + .responsetext + ")") .abort With Sheets("API") For Each Movie In R MsgBox (Movie.Name) .Cells(1, 2).Value = Movie.price_btc .Cells(1, 3).Value = Movie.price_usd .Cells(1, 4).Value = Movie.Rank Next Movie End With End With 

结束小组

我创build一个名为API的图表来返回值,但我不知道Movie Object中的值元素是如何返回的

您可以检查debugging比电影包含数据,但是当我尝试放入单元发送错误:

在这里输入图像说明

你的问题是,JavaScript对象的某些属性不能直接在VBA中访问,如果他们的名字匹配一个VBA关键字(或可能的一些其他“保留”的术语)。 “name”就是一个例子 – 你将会看到,如果没有切换到Movie.Name的情况下你不能写Movie.Name

这里有一个使用javascript来访问属性的方法,但是你最好使用类似VBAjson( https://github.com/VBA-tools/VBA-JSON )的方法,因为它提供了一个更好的“多用途”方法。

 Sub getData() Dim Movie As Object Dim R As Object Dim sc As Object, x Set sc = CreateObject("MSScriptControl.ScriptControl") sc.Language = "JScript" With CreateObject("MSXML2.XMLHTTP") .Open "GET", "https://api.coinmarketcap.com/v1/ticker/shift/", False .send sc.Eval ("var i, o = (" + .responsetext + ")") sc.Eval "function l(){return o.length;}" sc.Eval "function indx(n){i=n;}" sc.Eval "function p(pname){return o[i][pname];}" .abort With Sheets(1) For x = 1 To sc.Eval("l()") sc.Eval "indx(" & x - 1 & ")" 'set array index 'get properties at that index .Cells(1, 2).Value = sc.Eval("p('name')") .Cells(1, 2).Value = sc.Eval("p('price_btc')") .Cells(1, 3).Value = sc.Eval("p('price_usd')") .Cells(1, 4).Value = sc.Eval("p('Rank')") Next x End With End With End Sub