excel vba api cryptocurrency

VBA: llamada de API que se muestra en Excel



cryptocurrency (2)

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:

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

Estoy tratando de mostrar los precios de criptomonedas específicas en una hoja de Excel. Extraigo 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 Ripple (línea 17).

Este es mi guión, 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 recibo errores de sintaxis, 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 / encontrar el error a partir de ahora. Ver comentarios para Error de tiempo de ejecución, etc.

EDITAR 3: Creo que he cometido un error en las líneas 16 y 17 al referirme a oJSON y no al elemento (sItem). Sin embargo, incluso después de cambiar esto (por ejemplo, If sItem.Name = "Ripple" Then... ), todavía no funciona.

EDIT 4: creo que también etiqueté la celda de Excel de 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