Ein Auftraggeber fragt: „Können wir die Auftragsbeschreibungen aus Access nicht einfach von Claude umformulieren lassen? Direkt aus der Maske heraus, ohne dass jemand was rüberkopieren muss.“ Das ist eine ehrliche Frage, und sie hat eine ehrliche Antwort: ja, und das geht einfacher, als man denkt. Kein Python-Server, kein MCP, kein Claude Desktop beim Anwender. VBA spricht direkt mit der Claude API über HTTP.
Dieser Beitrag zeigt den Weg, der in der Praxis funktioniert — und zwar nicht nur die Grundanbindung, sondern auch die drei Themen, die nach dem ersten erfolgreichen Aufruf sofort auftauchen: welches Modell nehme ich, was kostet mich das, und wie nutze ich die mitgelieferten Skills.
Warum direkt aus VBA, nicht über einen Zwischen-Server
Die naheliegende Empfehlung in vielen Foren lautet: bau dir 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 kleine Access-Anwendung mit fünf Nutzern ist das Overkill. Der direkte HTTP-Aufruf aus VBA ist in zwei Stunden produktiv. Der Python-Zwischen-Server ist in zwei Wochen produktiv.
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.claude.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). 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-ant-api03-..."
Private Const API_URL As String = "https://api.anthropic.com/v1/messages"
Private Const API_VERSION As String = "2023-06-01"
Public Function ClaudeAnfrage(prompt As String, _
Optional model As String = "claude-opus-4-7", _
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
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.setRequestHeader "Content-Type", "application/json"
http.setRequestHeader "x-api-key", API_KEY
http.setRequestHeader "anthropic-version", API_VERSION
http.send jsonBody
Dim response As Object
Set response = JsonConverter.ParseJson(http.responseText)
ClaudeAnfrage = response("content")(1)("text")
End Function
Der Aufruf in einer Access-Form sieht dann so aus: Me.txtUmformuliert = ClaudeAnfrage("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?
Die Claude API kennt derzeit drei aktive Modell-Familien: Opus, Sonnet, Haiku. Die unterscheiden sich nicht im API-Verhalten, sondern in Intelligenz, Geschwindigkeit und Preis. Faustregel aus der Praxis:
Opus 4.7 für anspruchsvolle Aufgaben, bei denen die Qualität entscheidet — Vertragstexte umformulieren, schwierige Auswertungen kommentieren, komplexe Klassifikationen. Teuerstes Modell.
Sonnet 4.6 für die meisten Standardaufgaben — Beschreibungen umformulieren, E-Mail-Entwürfe, Stichpunkte zu Fließtext. Das Brot-und-Butter-Modell, gutes Preis-Leistungs-Verhältnis.
Haiku 4.5 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. Schnellste Antwortzeiten, niedrigste Kosten.
Die ehrliche Empfehlung: nicht von vornherein das teuerste Modell wählen, sondern mit Sonnet starten und nur dann auf Opus hochstufen, wenn die Sonnet-Antworten erkennbar zu kurz greifen. Bei vielen Standardaufgaben (Umformulieren, Zusammenfassen) reicht sogar Haiku.
Anthropic 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 ClaudeModelleAbrufen() As Collection
Dim http As Object
Set http = CreateObject("MSXML2.ServerXMLHTTP")
http.Open "GET", "https://api.anthropic.com/v1/models", False
http.setRequestHeader "x-api-key", API_KEY
http.setRequestHeader "anthropic-version", API_VERSION
http.send
Dim response As Object
Set response = JsonConverter.ParseJson(http.responseText)
Set ClaudeModelleAbrufen = response("data")
End Function
Ein nächtlicher Job kann diese Liste in eine Access-Tabelle schreiben — Modellname, Anzeigename, Erstellungsdatum. 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 Claude API liefert in jeder Response einen usage-Block mit den genauen Token-Werten zurück:
"usage": {
"input_tokens": 142,
"output_tokens": 38
}
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 ClaudeAnfrageMitLogging(prompt As String, _
kontext As String, _
Optional model As String = "claude-sonnet-4-6") As String
' ... (Aufruf wie oben) ...
Dim inputTokens As Long
Dim outputTokens As Long
inputTokens = response("usage")("input_tokens")
outputTokens = response("usage")("output_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
ClaudeAnfrageMitLogging = response("content")(1)("text")
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.claude.com/docs/pricing
' USD, hier vereinfacht 1:1 zu Euro (in Produktion: Tagessatz EZB einbauen)
Dim preisInput As Double, preisOutput As Double
Select Case model
Case "claude-opus-4-7": preisInput = 5#: preisOutput = 25#
Case "claude-sonnet-4-6": preisInput = 3#: preisOutput = 15#
Case "claude-haiku-4-5": preisInput = 1#: preisOutput = 5#
Case Else: preisInput = 3#: preisOutput = 15# ' Fallback Sonnet
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 Sonnet-Basis kostet pro Aufruf typischerweise zwischen 0,1 und 0,5 Cent. Bei 200 Aufrufen pro Tag entstehen also rund 20 bis 100 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.
Skill-Referenz mitgeben — der eigentliche Hebel
Den dritten Bonus erwähnt fast keine deutsche Quelle: die Claude API kennt seit kurzem das Konzept der Skills. Ein Skill ist eine wiederverwendbare Anweisungseinheit — Markenstimme, Formatregeln, Fachterminologie, fest verdrahteter Tonfall — die einmal definiert und dann pro API-Aufruf referenziert wird. Statt jeden Prompt mit drei Absätzen Kontext aufzublasen, übergibt man dem Modell eine Skill-ID, und Claude weiß, was zu tun ist.
Für KMU ist das ein praktischer Hebel: wer einen Skill „Höfliche Auftragsbestätigung im Stil der Firma X“ einmal definiert, kann ihn aus jeder Access-Maske, aus jedem WordPress-Plugin, aus jedem Excel-Makro referenzieren — und alle Ausgaben klingen konsistent.
Der Aufruf mit Skill-Referenz unterscheidet sich von der Grundvariante nur durch einen zusätzlichen Header und einen kleinen Block im Body:
http.setRequestHeader "anthropic-beta", "skills-2025-10-02"
' im body-Dictionary zusätzlich:
Dim skills As Object
Set skills = New Collection
Dim skill As Object
Set skill = New Dictionary
skill("type") = "skill"
skill("skill_id") = "skill_01ABC..." ' ID aus der Skills-Verwaltung
skill("version") = "latest"
skills.Add skill
body("skills") = skills
Skills werden vorher einmal über POST /v1/skills angelegt — entweder per API oder über die Konsole. Die offizielle Dokumentation steht unter platform.claude.com/docs.
Ein Beispiel aus dem norddeutschen Mittelstand: ein Holzgroßhandel hatte das Problem, dass jede Bestätigungs-E-Mail anders formuliert war — je nachdem, wer im Vertrieb am Werk war. Ein einziger Skill mit den Stilregeln des Hauses, referenziert aus der Access-Maske, sorgte dafür, dass die Ausgangskommunikation einheitlich wurde. Das ist eine kleine Sache, die in der Außenwirkung spürbar ist.
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 Claude direkt SQL gegen die Datenbank schreiben oder Datensätze anlegen lässt, riskiert Datenmüll. Die saubere Praxis: Claude 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.
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 Claude-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
- Claude API Documentation: platform.claude.com/docs
- VBA-JSON Library (Tim Hall): github.com/VBA-tools/VBA-JSON
- Skills API Reference: platform.claude.com/docs/en/api/skills
- Aktuelle Preise: platform.claude.com/docs/pricing
Ü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.



