我无法读取电影对象,我不知道为什么??,我试图将 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
End Sub
我创建一个名为 API 的工作表来返回值,但我不知道如何检索电影对象中的值元素
您可以在调试中检查电影是否包含数据,但是当我尝试放入单元格时发送错误:
您的问题是,如果 javascript 对象的名称与 VBA 关键字(或可能与其他“保留”术语)匹配,则无法在 VBA 中直接访问 javascript 对象的某些属性。 “名字”是一个例子 - 你会发现你不能写Movie.name
没有切换到案例Movie.Name
这是一种使用 javascript 访问属性的方法,但您最好使用 VBAjson (https://github.com/VBA-tools/VBA-JSON 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
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)