VBA: llamada de API que se muestra en Excel

Estoy tratando de mostrar precios de criptomonedas específicas en una hoja de Excel. Estoy extrayendo los datos JSON de la API de CoinMarketCap – https://api.coinmarketcap.com/v1/ticker/

En última instancia, estoy tratando de obtener el precio de Ripple (línea 16), y luego establezco la celda B1 en mi hoja de Excel para mostrar el precio de la fluctuación (línea 17).

Este es mi script, pero no funciona por alguna razón.

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 llamada API es exitosa (creo), pero obtengo errores de syntax, etc. Espero que alguien pueda ayudar. Gracias por adelantado

EDITAR: Esto es Microsoft Excel 2010

EDIT 2: Son las líneas 16 y 17 (respectivamente If oJSON.Name... y B1 = oJSON(... eso plantea el problema, pero no he podido resolverlo / encuentre el error a partir de ahora). Error de tiempo de ejecución, etc.

EDIT 3: Creo que cometí un error en las líneas 16 y 17 al referirme a oJSON y no al elemento (artículo). Sin embargo, incluso después de cambiar esto (por ejemplo, If sItem.Name = "Ripple" Then... ), todavía no está funcionando.

EDIT 4: Creo que también etiqueté a Excel-cell de la manera incorrecta. En lugar de simplemente escribir B1 = ... , ahora estoy escribiendo Range.("B1").Value = ... , que funcionó en una prueba.

Esta modificación sugerida por @omegastripes funciona aquí. El objeto json es una colección de diccionarios, por lo que debe tratarlo como tal.

 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 

Eche un vistazo al siguiente ejemplo. Importe el módulo JSON.bas al proyecto VBA para el procesamiento 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 

La salida para mí de la siguiente manera:

salida

Por cierto, el enfoque similar aplicado en las siguientes respuestas: 1 , 2 , 3 , 4 , 5 , 6 , 7 , 8 , 9 , 10 , 11 y 12 .