2016-12-06 58 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