excel - une - userform vba tutorial




Appel VBA-API affiché dans Excel (2)

Cette modification suggérée par @omegastripes fonctionne ici. L'objet json est une collection de dictionnaires, vous devez donc le traiter comme tel.

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

J'essaie de montrer les prix de crypto-monnaies spécifiques dans une feuille Excel. J'extrais les données JSON de l'API de CoinMarketCap - https://api.coinmarketcap.com/v1/ticker/

En fin de compte, j'essaie d'obtenir le prix de Ripple (ligne 16), puis de définir la cellule B1 dans mon feuille Excel pour afficher le prix de l'ondulation (ligne 17).

Ceci est mon script, mais il ne fonctionne pas pour une raison quelconque.

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

L'appel de l'API est réussi (je crois), mais je reçois des erreurs de syntaxe, etc. J'espère que tout le monde pourra vous aider. Merci d'avance

EDIT: Ceci est Microsoft Excel 2010

EDIT 2: Il s’agit des lignes 16 et 17 (respectivement, If oJSON.Name... et B1 = oJSON(... cela pose le problème, mais j’ai été incapable de le résoudre / trouver l’erreur dès maintenant. Voir les commentaires pour Erreur d'exécution, etc.

EDIT 3: Je pense avoir commis une erreur aux lignes 16 et 17 en faisant référence à oJSON et non à l’article (sItem). Cependant, même après avoir changé cela (par exemple, If sItem.Name = "Ripple" Then... ), il ne fonctionne toujours pas.

EDIT 4: Je crois que j'ai également marqué la cellule Excel de la mauvaise manière. Au lieu d'écrire simplement B1 = ... , j'écris maintenant Range.("B1").Value = ... , qui a fonctionné dans un test.


Regardez l'exemple ci-dessous. Importez le module JSON.bas dans le projet VBA pour le traitement 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 sortie pour moi comme suit:

BTW, l'approche similaire appliquée dans les réponses suivantes: 1 , 2 , 3 , 4 , 5 , 6 , 7 , 8 , 9 , 10 , 11 et 12 .





cryptocurrency