Und hier noch eine Beschreibung, wie die Daten, die im JSON-Format daherkommen, direkt verarbeitet werden können. Die Ausgabe ist dadurch schneller:
Ihr ladet euch von
https://github.com/VBA-tools/VBA-JSON das File JsonConverter.bas runter und bindet es als Modul in die vorhandene Datei ein. Im VBA-Editor aktiviert ihr die "Microsoft Scripting Runtime".
(Einfach draufklicken, wenn es matschig aussieht).
[
attachment=2672]
Anschließend erstellt ihr ein neues Modul und bindet folgenden Kot ein (vorher noch das Tabellenblatt in "Dividenden" umbenennen).
Code:
Sub Dividendenabfrage()
Dim jsonText As String
Dim jsonObject As Object, item As Object
Dim ws As Worksheet
Dim Zaehler As Integer
Set ws = Worksheets("Dividenden")
' *******************************************************************
Dim urlText As String
Dim urlText2 As String
Dim url_1 As String
Dim Datum As Date
Dim Monat As Integer
Dim Dividende As Double
Dim JahrSpalte As Integer
Zaehler = 6
ws.Range("B6:M1000").ClearContents ' sauber machen
JahrSpalte = 2 ' falls die Spalten erweitert werden, hier die aktuelel Spalte des Jahres eintragen. Im Beispiel ist das Spalte 2. Das Jahr steht an B3.
aktjahr = ws.Cells(3, JahrSpalte).Value
Do While Not IsEmpty(ws.Cells(Zaehler, 1).Value)
Ticker = ws.Cells(Zaehler, 1).Value
' ---------- Token ------------------
Token = "<hier Token einfügen>"
' ---------- Token ------------------
url_1 = "https://cloud.iexapis.com/stable/stock/" + Ticker + "/dividends/1y?token=" + Token
Set AB = CreateObject("MSXML2.XMLHTTP")
AB.Open "GET", url_1, False
AB.Send
'url content
urlText = AB.ResponseText
urlText2 = AB.ResponseBody
' *******************************************************************
jsonText = urlText
Set jsonObject = JsonConverter.ParseJson(jsonText)
For Each item In jsonObject
Datum = item("paymentDate")
Dividende = item("amount")
If Year(Datum) = aktjahr Then
Monat = Month(Datum)
ws.Cells(Zaehler, JahrSpalte + Monat - 1).Value = Dividende
End If
Next
Zaehler = Zaehler + 1
Loop
End Sub
Das war es auch schon. Nicht vergessen, das (oder den?) Token einzubinden.
Eine Roh-Datei sieht z.B. so aus:
Code:
[{"exDate":"2019-07-03","paymentDate":"2019-08-05","recordDate":"2019-07-05","declaredDate":"2019-06-05","amount":0.18,"flag":"No Change QoQ","currency":"USD","description":"ABM Industries Declares Quarterly Dividend $0.18 Per Share\t","frequency":"Quarterly","date":"2019-06-12"},{"exDate":"2019-04-03","paymentDate":"2019-05-06","recordDate":"2019-04-04","declaredDate":"2019-03-06","amount":0.18,"flag":"No Change QoQ","currency":"USD","description":"ABM Industries Declares Quarterly Dividend $0.18 Per Share ","frequency":"Quarterly","date":"2019-06-12"},{"exDate":"2019-01-02","paymentDate":"2019-02-04","recordDate":"2019-01-03","declaredDate":"2018-12-18","amount":0.18,"flag":"Increase","currency":"USD","description":"ABM Industries Hikes Quarterly Dividend 2.86%","frequency":"Quarterly","date":"2019-06-12"},{"exDate":"2018-10-03","paymentDate":"2018-11-05","recordDate":"2018-10-04","declaredDate":"2018-09-06","amount":0.175,"flag":"No Change QoQ","currency":"USD","description":"ABM Industries Declares Quarterly Dividend of $0.175 Per Share","frequency":"Quarterly","date":"2019-06-12"},{"exDate":"2018-07-03","paymentDate":"2018-08-06","recordDate":"2018-07-05","declaredDate":"2018-06-06","amount":0.175,"flag":"No Change QoQ","currency":"USD","description":"ABM Industries Declares Quarterly Dividend of $0.175 Per Share","frequency":"Quarterly","date":"2019-06-12"}]
Sie wird in ihre Items zerlegt und die Werte den entsprechenden Items zugewiesen.
Wer mehr Informationen raussaugen möchte, muss die Zeilen
Code:
Datum = item("paymentDate")
Dividende = item("amount")
entsprechend erweitern