(Stand: Mai 2026) Diese Seite war 2024 einer der ersten deutschsprachigen Praxis-Artikel zu Access und ChatGPT. Inzwischen sind die Modelle andere, der Code muss aktualisiert werden, und es gibt drei Themen, die im ursprünglichen Beitrag fehlten und die in der Praxis sofort nach dem ersten erfolgreichen Aufruf relevant werden: welches Modell nehme ich, was kostet mich das, und wie speichere ich den API-Schlüssel sicher.
Dieser Beitrag zeigt den aktualisierten Weg. Kein Python-Server, kein Zwischen-Service. Access spricht direkt mit der OpenAI API über HTTP.
Warum direkt aus VBA, nicht über einen Zwischen-Server
Die naheliegende Empfehlung in vielen Foren: bau einen kleinen Python-Server, der die Calls macht, und VBA spricht mit dem Server. Sauber, modern, gut testbar.
In der Realität bei KMU-Kunden ist das oft die falsche Antwort. Ein zusätzlicher Server bedeutet: zusätzlicher Rechner oder Container, zusätzliche Wartung, zusätzliche Sicherheitsbetrachtung, zusätzliche Fehlerquelle. Für eine Access-Anwendung mit fünf bis dreißig Nutzern ist das überdimensioniert. Der direkte HTTP-Aufruf aus VBA ist in zwei Stunden produktiv. Der Python-Zwischen-Server in zwei Wochen.
Pragmatisch heißt: das einfachere Werkzeug, das die Aufgabe erfüllt. In diesem Fall: VBA, MSXML2.ServerXMLHTTP, ein bisschen JSON. Mehr braucht es nicht.
Die Grundverbindung
Vorbereitung in drei Schritten. Erstens: bei platform.openai.com einen API-Schlüssel erzeugen. Zweitens: die VBA-JSON-Library von Tim Hall einbinden (GitHub: VBA-tools/VBA-JSON, MIT-Lizenz, eine einzelne .bas-Datei zum Import in das VBA-Projekt). Drittens: ein Standardmodul anlegen, das die Konstanten und die Aufruf-Funktion enthält.
Der erste produktive Aufruf sieht so aus:
' Hinweis: Der API-Schlüssel steht hier als Konstante,
' damit der Code lesbar bleibt. In Produktion gehört der Schlüssel
' nicht ins Modul, sondern in die Registry, den Windows Credential
' Manager oder eine externe Konfig. Mehr dazu am Ende des Beitrags.
Private Const API_KEY As String = "sk-..."
Private Const API_URL As String = "https://api.openai.com/v1/chat/completions"
Public Function ChatGPTAnfrage(prompt As String, _
Optional model As String = "gpt-5.4-mini", _
Optional maxTokens As Long = 1024) As String
Dim http As Object
Set http = CreateObject("MSXML2.ServerXMLHTTP")
Dim body As Object
Set body = New Dictionary
body("model") = model
body("max_tokens") = maxTokens
body("temperature") = 0.7
Dim messages As Object
Set messages = New Collection
Dim msg As Object
Set msg = New Dictionary
msg("role") = "user"
msg("content") = prompt
messages.Add msg
body("messages") = messages
Dim jsonBody As String
jsonBody = JsonConverter.ConvertToJson(body)
http.Open "POST", API_URL, False
http.setTimeouts 5000, 5000, 15000, 60000 ' Resolve, Connect, Send, Receive (ms)
http.setRequestHeader "Content-Type", "application/json"
http.setRequestHeader "Authorization", "Bearer " & API_KEY
http.send jsonBody
Dim response As Object
Set response = JsonConverter.ParseJson(http.responseText)
ChatGPTAnfrage = response("choices")(1)("message")("content")
End Function
Der Aufruf aus einer Access-Form sieht dann so aus: Me.txtUmformuliert = ChatGPTAnfrage("Formuliere diesen Text höflicher: " & Me.txtOriginal). Mehr ist es technisch nicht. Die Felder werden befüllt, die Maske bleibt eine Access-Maske, der Anwender merkt nichts vom HTTP-Aufruf im Hintergrund — außer der Wartezeit von ein bis vier Sekunden.
Das ist die Basis. Der eigentlich interessante Teil kommt jetzt.
Welches Modell nehmen? Und woher weiß ich von neuen?
OpenAI bietet im Mai 2026 drei aktive Modellfamilien an: GPT-5.4 (Flagship), GPT-4.1 (Long-Context-Workhorse), und die o-Serie für Reasoning-Aufgaben. Plus GPT-4o als legacy-grandfathered Variante für Bestandsanwendungen. Faustregel aus der Praxis:
GPT-5.4 für anspruchsvolle Aufgaben, bei denen die Qualität entscheidet — Vertragstexte umformulieren, schwierige Auswertungen kommentieren, komplexe Klassifikationen. Teuerstes Standard-Modell, aber spürbar besser bei nuancierten Aufgaben.
GPT-5.4 mini für die meisten Standardaufgaben — Beschreibungen umformulieren, E-Mail-Entwürfe, Stichpunkte zu Fließtext. Das Brot-und-Butter-Modell, sehr gutes Preis-Leistungs-Verhältnis. In den meisten Access-Anwendungen die richtige Standardwahl.
GPT-4.1 nano für hohe Stückzahlen mit einfacher Aufgabe — etwa wenn 5.000 Datensätze klassifiziert werden sollen, oder wenn Stichworte aus einer Adresse extrahiert werden müssen. Niedrigste Kosten, ausreichende Qualität für Routineaufgaben.
GPT-4.1 speziell für Aufgaben mit sehr langem Kontext (bis 1 Million Tokens) — etwa wenn ein ganzes Vertragsdokument bewertet werden soll. Für die meisten Access-Anwendungen ist das overkill, aber für gezielte Anwendungsfälle sehr nützlich.
Die ehrliche Empfehlung: nicht von vornherein das teuerste Modell wählen, sondern mit GPT-5.4 mini starten und nur dann auf GPT-5.4 hochstufen, wenn die mini-Antworten erkennbar zu kurz greifen. Bei vielen Standardaufgaben (Umformulieren, Zusammenfassen) reicht das mini-Modell vollständig.
OpenAI ergänzt regelmäßig neue Modelle. Statt jeden Modellnamen hart in den Code zu schreiben, lässt sich die Liste über GET /v1/models abrufen:
Public Function ChatGPTModelleAbrufen() As Object
Dim http As Object
Set http = CreateObject("MSXML2.ServerXMLHTTP")
http.Open "GET", "https://api.openai.com/v1/models", False
http.setRequestHeader "Authorization", "Bearer " & API_KEY
http.send
Dim response As Object
Set response = JsonConverter.ParseJson(http.responseText)
Set ChatGPTModelleAbrufen = response("data")
End Function
Ein nächtlicher Job kann diese Liste in eine Access-Tabelle schreiben — Modellname, Erstellungsdatum, ownership. Die Anwendung greift dann auf die Tabelle zu, statt fest verdrahtete Modellnamen zu kennen. Wer das einmal eingerichtet hat, erfährt automatisch von neuen Modellen, ohne den Code anzufassen.
Was kostet das eigentlich — Logging in Token und Euro
Wer KI-Funktionen in eine Geschäftsanwendung einbaut, bekommt früher oder später die Frage des Geschäftsführers: „Und was kostet uns das im Monat?“ Eine ehrliche Antwort gibt nur, wer mitloggt.
Die OpenAI API liefert in jeder Response einen usage-Block mit den genauen Token-Werten zurück:
"usage": {
"prompt_tokens": 142,
"completion_tokens": 38,
"total_tokens": 180
}
Diese Werte sind nicht Schätzung, sondern Abrechnungsgrundlage. Wer sie in eine Access- oder SQL-Server-Tabelle schreibt, hat jederzeit eine belastbare Kostenübersicht. Die Logging-Funktion erweitert den obigen Code um wenige Zeilen:
Public Function ChatGPTAnfrageMitLogging(prompt As String, _
kontext As String, _
Optional model As String = "gpt-5.4-mini") As String
' ... (Aufruf wie oben) ...
Dim inputTokens As Long
Dim outputTokens As Long
inputTokens = response("usage")("prompt_tokens")
outputTokens = response("usage")("completion_tokens")
' In Tabelle KI_Aufrufe schreiben
Dim sql As String
sql = "INSERT INTO KI_Aufrufe " & _
"(Zeitpunkt, Benutzer, Modell, Kontext, InputTokens, OutputTokens, KostenEuro) " & _
"VALUES (Now(), '" & Environ("USERNAME") & "', '" & model & "', '" & _
Replace(kontext, "'", "''") & "', " & inputTokens & ", " & outputTokens & ", " & _
BerechneKosten(model, inputTokens, outputTokens) & ")"
CurrentDb.Execute sql
ChatGPTAnfrageMitLogging = response("choices")(1)("message")("content")
End Function
Private Function BerechneKosten(model As String, inputTok As Long, outputTok As Long) As Currency
' Preise pro 1 Million Tokens, Stand prüfen unter platform.openai.com/docs/pricing
' USD, hier vereinfacht 1:1 zu Euro (in Produktion: Tageskurs EZB einbauen)
Dim preisInput As Double, preisOutput As Double
Select Case model
Case "gpt-5.4": preisInput = 2.5: preisOutput = 15#
Case "gpt-5.4-mini": preisInput = 0.75: preisOutput = 4.5
Case "gpt-5.4-nano": preisInput = 0.2: preisOutput = 1.25
Case "gpt-4.1": preisInput = 2#: preisOutput = 8#
Case "gpt-4.1-mini": preisInput = 0.4: preisOutput = 1.6
Case "gpt-4.1-nano": preisInput = 0.1: preisOutput = 0.4
Case Else: preisInput = 0.75: preisOutput = 4.5 ' Fallback mini
End Select
BerechneKosten = (inputTok / 1000000# * preisInput) + (outputTok / 1000000# * preisOutput)
End Function
Das kontext-Argument ist die wichtige Stelle: sinnvoll ist nicht der Prompt-Text, sondern eine kurze Funktionskennung wie „Auftragstext_Umformulieren“ oder „Adresse_Pruefen“. Dann lässt sich später per Pivot oder Bericht auswerten, welche Funktionen wieviel kosten — und welche sich rechnen.
Konkrete Größenordnung aus realen Projekten: eine Umformulierungs-Funktion auf GPT-5.4-mini-Basis kostet pro Aufruf typischerweise zwischen 0,05 und 0,2 Cent. Bei 200 Aufrufen pro Tag entstehen also rund 5 bis 20 Euro pro Monat. Das ist ein Vielfaches günstiger als jede SaaS-Lösung mit Pro-Nutzer-Lizenz — aber das weiß man eben erst sicher, wenn man loggt.
Wo das an Grenzen stößt
Der direkte VBA-Weg ist pragmatisch, aber er hat Grenzen, die im Artikel ehrlich benannt sein müssen.
Der API-Schlüssel im Code ist unsicher. Im Beispiel oben steht der Schlüssel als Konstante, damit der Code lesbar bleibt. In Produktion gehört er nicht dorthin. Drei akzeptable Alternativen: Registry pro User unter HKCU (besser als Konstante, aber Klartext), Windows Credential Manager über entsprechende API-Calls (verschlüsselt durch das Windows-Benutzerkonto), oder eine externe Konfig-Datei außerhalb des Repositories. Für die meisten KMU-Anwendungen reicht die Registry-Variante in Kombination mit klarem Onboarding-Prozess. Wer höhere Sicherheitsanforderungen hat, geht über den Credential Manager.
Synchrone Aufrufe blockieren die Maske. Der gezeigte Code wartet auf die Antwort. Bei längeren Wartezeiten friert die Access-Oberfläche kurz ein. Für kurze Antworten unter zwei Sekunden ist das vertretbar. Bei längeren Aufrufen lohnt sich ein asynchroner Ansatz mit http.Open ..., True und einer Callback-Funktion — komplexer im Code, deutlich besser im Benutzererlebnis.
Halluzinationen bei Schreibzugriffen. Wer ChatGPT direkt SQL gegen die Datenbank schreiben oder Datensätze anlegen lässt, riskiert Datenmüll. Die saubere Praxis: ChatGPT liefert Vorschläge, ein Mensch oder eine Validierungsschicht prüft, dann erst wird geschrieben. Das ist langweiliger als „KI legt selbständig Aufträge an“, aber es ist die einzige Variante, die in der Buchhaltung haltbar ist.
Lieber Claude statt ChatGPT?
OpenAI ist nicht die einzige Wahl. Wer Anthropic Claude statt ChatGPT anbinden möchte — etwa weil die Antwortqualität für den eigenen Anwendungsfall besser passt, oder weil das Skills-Feature für wiederkehrende Markenstimme- und Stilregeln gebraucht wird — findet die Anleitung in Access mit Claude verbinden. Die Struktur ist identisch, die API-spezifischen Unterschiede stehen im Detail.
Die ehrliche Antwort auf „welches ist besser?“ lautet: kommt auf den Anwendungsfall an. Beide funktionieren. Das wichtige ist, dass die Architektur — Access spricht direkt mit der API — bei beiden Anbietern gleich pragmatisch bleibt.
Der Brückenschlag
Die meisten Leser dieses Beitrags werden Access-Entwickler oder IT-Verantwortliche sein, die genau diese Aufgabe auf dem Tisch haben. Wenn Du in der Rolle des Geschäftsführers liest und Dich der Code weniger interessiert als die Frage „Was bringt mir das wirtschaftlich, und wann lohnt es sich nicht?“, lies stattdessen ERP-Wechsel zu teuer? Warum kluge Mittelständler ihr Altsystem behalten. Dort steht die Geschäftssicht.
Wer eine bestehende Access-Anwendung um ChatGPT-Funktionen erweitern möchte und sich nicht sicher ist, an welcher Stelle das wirklich Geld spart oder Zeit gewinnt, kann ein einstündiges Erstgespräch buchen über sesoft.de/kostenloses-erstgespraech-sichern.
Quellen
- OpenAI API Documentation: platform.openai.com/docs
- Aktuelle Preise: platform.openai.com/docs/pricing
- VBA-JSON Library (Tim Hall): github.com/VBA-tools/VBA-JSON
- Schwester-Artikel zu Claude: sesoft.de/access-mit-claude-verbinden
Über den Autor
Sönke Schäfer berät seit über 25 Jahren norddeutsche Mittelständler bei der pragmatischen Erweiterung gewachsener Datenbanksysteme. Sein Schwerpunkt liegt auf Microsoft Access und SQL Server — und auf der Frage, wie KI-Funktionen wirtschaftlich sinnvoll in bestehende Anwendungen eingebaut werden, ohne dass dafür ein Großprojekt aufgesetzt werden muss.
Mehr zum Autor Sönke Schäfer


