Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1912to1916
Aktuelles Verzeichnis
Verzeichnis Index
Übersicht Verzeichnisse
Vorheriger Thread
Rückwärts Blättern
Nächster Thread
Vorwärts blättern
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Inhaltsverzeichnis

VBA-JSON Werte aus zellen einfügen

VBA-JSON Werte aus zellen einfügen
02.01.2023 17:36:43
Matze
Hallo,
ich bastle seit geraumer Zeit an einem Exceldokument herum, in dem ich verschiedene API's abfragen möchte, um sie miteinander zu verknüpfen und auszuwerten.
nun bin ich an einem Punkt angelangt, an dem ich nicht weiterkomme. ich möchte von https://api.coincap.io/v2/candles?exchange=poloniex&interval=h1&baseId=ethereum&quoteId=bitcoin&start=1649894400000&end=1649898000000 den Wert "volume" in aufeinanderfolgenden Zellen ausgeben lassen. Das funktioniert auch schon gut. Allerdings möchte ich die Parameter für die Abfrage aus einer Zelle beziehen und da harpert es bei mir. Vermutlich ist es nur eine Kleinigkeit aber ich komme selber einfach nicht weiter. Mein code sieht folgendermaßen aus:

Sub GetVolume()
On Error Resume Next
'List of all symbols
Set http = CreateObject("MSXML2.XMLHTTP")
http.Open "GET", "https://api.coincap.io/v2/candles", False
On Error Resume Next
http.Send
Set json = ParseJson(http.ResponseText)
i = 10
For Each item In json("data")
If item("exchange") = Workbooks(1).Worksheets("Tabelle1").Range("A1").Value And Workbooks(1).Worksheets("Tabelle1").Range("A1").Value  "" Then
Sheets(1).Cells(1, i).Value = item("volume")
i = i + 1
End If
Next
Exit Sub
error:
End Sub
Die Parameter sollen also aus der Zelle A1 genommen werden und die Antwort in J1 und folgenden ausgegeben werden. Die Werte in A1 kommen dann später aus verschiedenen Zellen und sind mit Excel Funktionen zusammengesetzt.
Der Link zu meiner Excel-Datei lautet: https://www.herber.de/bbs/user/157048.xlsm
für jeden Tip bin ich dankbar.

7
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: VBA-JSON Werte aus zellen einfügen
03.01.2023 00:53:49
Yal
Hallo Matze,
noch keine Antwort, daher lasse ich die Frage offen.
Nur Hygiene-Faktor:
_ ein sauberes Einrücken bringt eine bessere Übersicht über den Code und das Erkennen von dummen Fehler leichter.
_ ich würde auch die Variabledeklaration als "erforderlich" schalten. Profis machen es so. Warum wohl.
Ist es richtig, dass Du bei jedem "Item" abfragst, ob Range("A1") <> "" obwohl dies im Lauf der Behandlung sich nicht ändert?
"sheets(1)" scheint Worksheets("Tabelle1") zu sein. Warum zwei verschiedenen Benennungen? Spass an dich selbst zu verwirren? Zu viel Denkvermögen vorhanden? Langeweile?
Ich bringe den Code nicht zum Laufen: schon auf die Zeile "Sub GetVolume()" bricht es mit "ungültige Prozedureaufruf oder ungültiges Argument".
Ausserdem scheint dein http.Open fehlerhaft zu sein: es ist nicht im Browser zu öffnen.

Sub GetVolume()
On Error Resume Next
'List of all symbols
Set http = CreateObject("MSXML2.XMLHTTP")
http.Open "GET", "https://api.coincap.io/v2/candles", False
http.Send
Set json = ParseJson(http.ResponseText)
With Workbooks(1).Worksheets("Tabelle1")
i = 10
If .Range("A1").Value  "" Then
For Each Item In json("data")
If Item("exchange") = .Range("A1").Value Then
.Cells(1, i).Value = Item("volume")
i = i + 1
End If
Next
End If
End With
Exit Sub
error:
End Sub
VG
Yal
Anzeige
AW: VBA-JSON Werte aus zellen einfügen
03.01.2023 10:58:40
Matze
Vielen Dank, für die schnelle Antwort und das Ordnen meines Codes.
Die Basis für diese Abfrage ist dieser funktionierende Code:

Sub GetPrice()
On Error Resume Next
'List of all prices
Set http = CreateObject("MSXML2.XMLHTTP")
http.Open "GET", "https://api.binance.com/api/v3/ticker/price", False
http.Send
Set json = ParseJson(http.ResponseText)
With Workbooks(1).Worksheets("Tabelle1")
i = 10
If .Range("A1").Value  "" Then
For Each item In json
If item("symbol") = .Range("A1").Value Then
.Cells(1, i).Value = item("price")
i = i + 1
End If
Next
End If
End With
Exit Sub
error:
End Sub
Ich nutze ihn an anderer Stelle in meiner Datei und habe ihn nach deinem Vorbild überarbeitet.
Meine Idee war nun, "symbol" durch "exchange" zu ersetzen und den text in A1 "ETHBTC" durch "binance&interval=h1&baseId=ethereum&quoteId=bitcoin&start=1649894400000&end=1649898000000"
in meinem Vorbild setzt sich die Abfrage dann zu "https://api.binance.com/api/v3/ticker/price?symbol=ETHBTC" zusammen. In meiner nicht funktionierenden Version sollte sich folgende Abfrage ergeben:"https://api.coincap.io/v2/candles?exchange=binance&interval=h1&baseId=ethereum&quoteId=bitcoin&start=1649894400000&end=1649898000000" aber leider funktioniert das nicht.
Anzeige
AW: VBA-JSON Werte aus zellen einfügen
03.01.2023 13:38:48
ChrisL
Hi
Der Server gibt öfters Fehler zurück wie nicht (ich vermute eine allgemeine Überlast). Wenn der Server zufälligerweise mal erreichbar ist, sollte folgender Code funktionieren. Das Parsen ist im Code bereits enthalten.
Beispieldaten in Zelle A1 und A2:
https://www.herber.de/bbs/user/157061.txt

Sub GetVolume()
Dim objHTTP As Object, lngZeile As Long, strAntwort As String
Set objHTTP = CreateObject("MSXML2.XMLHTTP")
With ThisWorkbook.Worksheets("Tabelle1")
For lngZeile = 1 To .Cells(.Rows.Count, 1).End(xlUp).Row
objHTTP.Open "GET", "https://api.coincap.io/v2/candles?exchange=" & .Cells(lngZeile, 1), False
objHTTP.Send
strAntwort = objHTTP.ResponseText
If InStr(strAntwort, "volume") Then
strAntwort = Mid(strAntwort, InStr(strAntwort, "volume") + 9, 999)
strAntwort = Left(strAntwort, InStr(strAntwort, """") - 1)
.Cells(lngZeile, 2) = strAntwort
Else
.Cells(lngZeile, 2) = "Server antwortet nicht"
End If
Next lngZeile
End With
End Sub
cu
Chris
Anzeige
AW: VBA-JSON Werte aus zellen einfügen
03.01.2023 19:38:46
Matze
Danke, das funktioniert super. Ich habe allerdings für mein Beispiel einen ungünstigen Parameter für "interval" gewählt. ich benötige nämlich einen Interval von 15 Minuten. Da werden mir dann vier Werte für "volume" ausgegeben. Ich bekomme es aber nicht hin, zu loopen, dass ich die vier Werte in einer Reihe angezeigt bekomme.

Sub GetVolume()
Dim objHTTP As Object, lngZeile As Long, strAntwort As String
Set objHTTP = CreateObject("MSXML2.XMLHTTP")
With ThisWorkbook.Worksheets("Tabelle1")
For lngZeile = 1 To .Cells(.Rows.Count, 1).End(xlUp).Row
objHTTP.Open "GET", "https://api.coincap.io/v2/candles?exchange=" & .Cells(lngZeile, 1), False
objHTTP.Send
i = 2
strAntwort = objHTTP.ResponseText
If InStr(strAntwort, "volume") Then
strAntwort = Mid(strAntwort, InStr(strAntwort, "volume") + 9, 999)
strAntwort = Left(strAntwort, InStr(strAntwort, """") - 1)
.Cells(lngZeile, i) = strAntwort
i = i + 1
Else
.Cells(lngZeile, i) = "Server antwortet nicht"
End If
Next lngZeile
End With
End Sub

Anzeige
AW: VBA-JSON Werte aus zellen einfügen
04.01.2023 08:46:59
ChrisL
Hi
Übrigens mal "Power-Query Webabfrage mit Parameter" recherchieren. Damit solltest du auch ohne VBA zum Ziel kommen.
Hier den angepassten Code. Wenn die Parserei noch umfangreicher wird, dann würde ich dann doch wieder eher auf einen ordentlichen Jason-Parser zurückgreifen.
Der Interval Parameter ist übrigens m15

Sub GetVolume()
Dim objHTTP As Object, lngZeile As Long, strAntwort As String, varSplit As Variant, i As Integer
Set objHTTP = CreateObject("MSXML2.XMLHTTP")
With ThisWorkbook.Worksheets("Tabelle1")
For lngZeile = 1 To .Cells(.Rows.Count, 1).End(xlUp).Row
objHTTP.Open "GET", "https://api.coincap.io/v2/candles?exchange=" & .Cells(lngZeile, 1), False
objHTTP.Send
strAntwort = objHTTP.ResponseText
If InStr(strAntwort, "volume") Then
varSplit = Split(strAntwort, "volume"":""")
For i = 1 To UBound(varSplit)
.Cells(lngZeile, i + 1) = Left(varSplit(i), InStr(varSplit(i), """") - 1)
Next i
Else
.Cells(lngZeile, 2) = "Server antwortet nicht"
End If
Next lngZeile
End With
End Sub
cu
Chris
Anzeige
AW: VBA-JSON Werte aus zellen einfügen
06.01.2023 20:00:19
Matze
Vielen Dank, ich werde es ausprobieren, sobald es wieder geht. Der Server antwortet leider nur noch mit dem Timestamp und gibt keine Werte mehr raus. Ich werde mich wohl, was die API angeht umorientieren müssen (evtl. Cryptowatch). Mit Powerquery habe ich mich auseinandergesetzt. Da ich aber Werte abfragen möchte, für deren Abfrage veränderliche Parameter benötigt werden, habe ich mich für vba entschieden. Ich habe nämlich keine Möglichkeit gefunden, Parameter für eine Powerquery-Abfrage aus Zellen zu beziehen.
AW: VBA-JSON Werte aus zellen einfügen
07.01.2023 08:20:55
ChrisL
Hi Matze
Danke für die Rückmeldung.
N.b. in PQ kann man auch mit Parametern arbeiten. Wird zwar etwas komplizierter, aber dies ist VBA ja auch. Z.B. mal nach "dynamische Webabfrage" suchen und ein Video schauen.
cu
Chris
Anzeige

317 Forumthreads zu ähnlichen Themen

Anzeige
Anzeige
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige