VBA – Chiamata API visualizzata in Excel

Sto cercando di mostrare i prezzi di criptovalute specifiche in un foglio Excel. Sto estraendo i dati JSON dall’API di CoinMarketCap – https://api.coinmarketcap.com/v1/ticker/

In definitiva, sto cercando di ottenere il prezzo di Ripple (riga 16) e quindi di impostare la cella B1 nel mio foglio Excel per visualizzare il prezzo del ripple (riga 17).

Questo è il mio script, ma non funziona per qualche motivo.

Sub test() Dim httpObject As Object Set httpObject = CreateObject("MSXML2.XMLHTTP") sURL = "https://api.coinmarketcap.com/v1/ticker/" sRequest = sURL httpObject.Open "GET", sRequest, False httpObject.Send sGetResult = httpObject.ResponseText Dim oJSON As Object Set oJSON = JsonConverter.ParseJson(sGetResult) If oJSON.Name = "Ripple" Then B1 = oJSON("Ripple")("price_usd") End If End Sub 

La chiamata API ha esito positivo (credo), ma ricevo errori di syntax, ecc. Spero che qualcuno sia in grado di aiutarti. Grazie in anticipo

EDIT: questo è Microsoft Excel 2010

EDIT 2: Sono le righe 16 e 17 (rispettivamente If oJSON.Name... e B1 = oJSON(... che pone il problema, ma non sono stato in grado di risolverlo / trovare l’errore al momento. Vedere i commenti per Run Time Error ecc.

EDIT 3: Credo di aver commesso un errore nelle righe 16 e 17 facendo riferimento a oJSON e non all’articolo (sItem). Tuttavia, anche dopo averlo modificato (ad es. If sItem.Name = "Ripple" Then... ), non funziona ancora.

EDIT 4: Credo di aver anche taggato la cella excel nella maniera sbagliata. Invece di scrivere semplicemente B1 = ... , ora sto scrivendo Range.("B1").Value = ... , che ha funzionato in un test.

Questa modifica suggerita da @omegastripes funziona qui. L’object json è una raccolta di dizionari, quindi è necessario trattarlo come tale.

 Dim oJSON As Object Set oJSON = JsonConverter.ParseJson(sGetResult) Dim V As Object For Each V In oJSON If V("name") = "Ripple" Then Cells(1, 2) = V("price_usd") Exit For End If Next V 

Dai un’occhiata all’esempio qui sotto. Importare il modulo JSON.bas nel progetto VBA per l’elaborazione JSON.

 Option Explicit Sub Test48852376() Dim sJSONString As String Dim vJSON As Variant Dim sState As String Dim vElement As Variant Dim sValue As String Dim aData() Dim aHeader() ' Retrieve JSON string With CreateObject("MSXML2.XMLHTTP") .Open "GET", "https://api.coinmarketcap.com/v1/ticker/", False .Send sJSONString = .responseText End With ' Parse JSON JSON.Parse sJSONString, vJSON, sState If sState = "Error" Then MsgBox "Invalid JSON string": Exit Sub ' Extract ripple price_usd Do For Each vElement In vJSON Select Case False Case vElement.Exists("id") Case vElement("id") = "ripple" Case vElement.Exists("price_usd") Case Else MsgBox "ripple price_usd " & vElement("price_usd") Exit Do End Select Next MsgBox "ripple price_usd not found" Loop Until True ' Output the entire table to the worksheet JSON.ToArray vJSON, aData, aHeader With Sheets(1) .Cells.Delete .Cells.WrapText = False OutputArray .Cells(1, 1), aHeader Output2DArray .Cells(2, 1), aData .Columns.AutoFit End With MsgBox "Completed" End Sub Sub OutputArray(oDstRng As Range, aCells As Variant) With oDstRng .Parent.Select With .Resize(1, UBound(aCells) - LBound(aCells) + 1) .NumberFormat = "@" .Value = aCells End With End With End Sub Sub Output2DArray(oDstRng As Range, aCells As Variant) With oDstRng .Parent.Select With .Resize( _ UBound(aCells, 1) - LBound(aCells, 1) + 1, _ UBound(aCells, 2) - LBound(aCells, 2) + 1) .NumberFormat = "@" .Value = aCells End With End With End Sub 

L’output per me come segue:

produzione

A proposito, l’approccio simile applicato nelle seguenti risposte: 1 , 2 , 3 , 4 , 5 , 6 , 7 , 8 , 9 , 10 , 11 e 12 .