2016-12-06 69 views
2

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

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 

末次

我创建了一个名为表API返回值,但我不知道怎么值在retrive电影对象元素

您可以在调试检查比电影包含数据,但是当我试图把细胞发送一个错误:

enter image description here

+0

[解析JSON在Excel VBA(http://stackoverflow.com/questions/6627652/parsing-json-in-excel-vba)的可能的复制 – Comintern

回答

4

你的问题是,JavaScript对象的某些属性CA如果它们的名称与VBA关键字匹配(或可能存在其他“保留”术语),则不能直接在VBA中访问。 “名”就是一个例子 - 你会发现你不能没有的情况下写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 
+2

哇,不错的职位! – 2016-12-06 17:43:45

+0

太好了,谢谢你的帮助 – user3215778