Zum Inhalt springen

REST-APIs mit VBA aufrufen: JSON-Daten in Excel importieren

REST-APIs per VBA in Excel nutzen: HTTP-Requests senden, JSON parsen und Daten automatisch importieren. Schritt-für-Schritt-Anleitung mit Code.

VBA & MakrosExcel· 4 Min. Lesezeit

Viele Unternehmensprozesse erfordern den Austausch von Daten zwischen Excel und externen Systemen. REST-APIs sind dabei der Standard. Ob Wechselkurse, Lagerbestände aus einem ERP-System oder Kundendaten aus einem CRM: Mit VBA lassen sich diese Schnittstellen direkt aus Excel ansprechen, ohne zusätzliche Software.

Dieser Beitrag zeigt Ihnen Schritt für Schritt, wie Sie HTTP-Requests aus VBA senden, JSON-Antworten verarbeiten und die Ergebnisse strukturiert in Ihre Tabelle schreiben.

Voraussetzungen

Bevor Sie loslegen, müssen zwei Verweise in Ihrem VBA-Projekt aktiviert werden (Menü: Extras > Verweise):

  • Microsoft XML, v6.0: für HTTP-Requests über MSXML2.XMLHTTP60
  • Microsoft Scripting Runtime: für Dictionary-Objekte beim JSON-Parsing

Alternativ können Sie mit CreateObject("MSXML2.XMLHTTP") auch Late Binding verwenden, was die Verweise überflüssig macht.

Schritt 1: Einen einfachen GET-Request senden

Das folgende Beispiel ruft Daten von einer REST-API ab und gibt die Antwort als Text zurück.

Function ApiGet(url As String) As String
    Dim http As Object
    Set http = CreateObject("MSXML2.XMLHTTP")

    http.Open "GET", url, False
    http.setRequestHeader "Content-Type", "application/json"
    http.setRequestHeader "Accept", "application/json"
    http.Send

    If http.Status = 200 Then
        ApiGet = http.responseText
    Else
        ApiGet = "FEHLER: HTTP " & http.Status & " - " & http.statusText
    End If

    Set http = Nothing
End Function

Schritt 2: Authentifizierung mit API-Key oder Bearer Token

Die meisten geschäftlichen APIs erfordern eine Authentifizierung. Hier zwei gängige Varianten:

' Variante 1: API-Key im Header
http.setRequestHeader "X-API-Key", "IHR_API_KEY_HIER"

' Variante 2: Bearer Token (OAuth 2.0)
http.setRequestHeader "Authorization", "Bearer " & strAccessToken

Sicherheitshinweis: Speichern Sie API-Schlüssel niemals direkt im VBA-Code. Verwenden Sie stattdessen eine geschützte Konfigurationszelle oder Windows-Umgebungsvariablen.

Schritt 3: JSON-Antworten parsen

Excel VBA hat keine eingebaute JSON-Unterstützung. Für einfache Strukturen können Sie String-Funktionen nutzen. Für komplexere Daten empfehlen wir die Open-Source-Bibliothek VBA-JSON (JsonConverter).

Einfaches Parsing mit String-Funktionen

Function ExtractJsonValue(json As String, key As String) As String
    Dim keyPos As Long, startPos As Long, endPos As Long
    keyPos = InStr(json, """" & key & """")
    If keyPos = 0 Then
        ExtractJsonValue = ""
        Exit Function
    End If

    startPos = InStr(keyPos, json, ":") + 1
    ' Leerzeichen und Anführungszeichen überspringen
    Do While Mid(json, startPos, 1) = " " Or Mid(json, startPos, 1) = """"
        startPos = startPos + 1
    Loop

    endPos = startPos
    Do While Mid(json, endPos, 1) <> """" And Mid(json, endPos, 1) <> "," _
        And Mid(json, endPos, 1) <> "}"
        endPos = endPos + 1
    Loop

    ExtractJsonValue = Mid(json, startPos, endPos - startPos)
End Function

Parsing mit VBA-JSON (empfohlen)

Sub ImportApiData()
    Dim json As String
    Dim parsed As Object
    Dim item As Object
    Dim row As Long

    json = ApiGet("https://api.beispiel.de/v1/produkte")
    Set parsed = JsonConverter.ParseJson(json)

    row = 2  ' Startzeile (Zeile 1 = Überschriften)
    For Each item In parsed
        Cells(row, 1).Value = item("id")
        Cells(row, 2).Value = item("name")
        Cells(row, 3).Value = item("preis")
        Cells(row, 4).Value = item("lagerbestand")
        row = row + 1
    Next item

    MsgBox "Import abgeschlossen: " & (row - 2) & " Datensätze."
End Sub

Schritt 4: POST-Requests für Datenübermittlung

Um Daten an eine API zu senden, verwenden Sie POST statt GET:

Function ApiPost(url As String, jsonBody As String) As String
    Dim http As Object
    Set http = CreateObject("MSXML2.XMLHTTP")

    http.Open "POST", url, False
    http.setRequestHeader "Content-Type", "application/json"
    http.Send jsonBody

    ApiPost = http.responseText
    Set http = Nothing
End Function

' Aufruf:
Dim result As String
result = ApiPost("https://api.beispiel.de/v1/bestellungen", _
    "{""kunde"":""Müller GmbH"",""produkt_id"":42,""menge"":100}")

Fehlerbehandlung und Empfehlungen

Thema Empfehlung
Timeouts Setzen Sie http.setTimeouts 5000, 5000, 10000, 30000 für ServerXMLHTTP
Fehler abfangen Prüfen Sie immer http.Status vor der Verarbeitung
Rate Limiting Bauen Sie Application.Wait zwischen Requests ein
SSL-Zertifikate Verwenden Sie MSXML2.ServerXMLHTTP60 für HTTPS
Logging Schreiben Sie Fehler in ein Log-Tabellenblatt

Praxisbeispiel: Wechselkurse automatisch aktualisieren

Sub WechselkurseAktualisieren()
    Dim json As String, kurs As String
    Dim waehrungen As Variant
    waehrungen = Array("USD", "GBP", "CHF", "JPY")

    Dim i As Long
    For i = 0 To UBound(waehrungen)
        json = ApiGet("https://api.exchangerate.host/latest?base=EUR&symbols=" _
            & waehrungen(i))
        kurs = ExtractJsonValue(json, waehrungen(i))
        Cells(i + 2, 1).Value = "EUR/" & waehrungen(i)
        Cells(i + 2, 2).Value = CDbl(kurs)
        Cells(i + 2, 3).Value = Now()
    Next i
End Sub

Fazit

VBA-basierte API-Anbindungen sind eine pragmatische Lösung, um Excel-Tabellen mit externen Datenquellen zu verbinden. Für Unternehmen, die bereits stark auf Excel setzen, ist dieser Ansatz oft schneller und kostengünstiger als eine vollständige Middleware-Lösung. Bei komplexen Integrationen oder hohen Sicherheitsanforderungen sollten Sie jedoch professionelle Unterstützung in Anspruch nehmen.


Das könnte Sie auch interessieren:

Unsere Services

Das könnte Sie auch interessieren

Lieber machen lassen?

Wir setzen Ihre Excel-, Word- oder PDF-Lösung um, zum Festpreis und mit kostenlosem Angebot innerhalb von 48 Stunden.

  • Angebot in 48 Stunden
  • Festpreis ohne versteckte Kosten
  • 14 Tage kleinere Anpassungen kostenfrei