Access im Zusammenspiel

Access-Daten nach Excel, Word und Outlook exportieren, ohne von Hand zu kopieren

Der Export ist nicht der schwierige Teil. Schwierig wird es an drei Stellen: bei der Auswahl der Datensätze, bei der Wiederholbarkeit und bei dem, was passiert, wenn die Zieldatei gerade offen ist.

KI-generiertDieses Bild wurde mit KI erzeugt · Yves Hoppe / KI / cmt
Seit 1997 am Markt Kleine Gruppen Präsenz und Live-Online Zertifizierte Trainer
Worum es geht

Der Monatslauf, den nur eine Person kann und der jedes Mal eine Stunde kostet

Der typische Ablauf sieht so aus: Jemand öffnet die Datenbank, klickt sich zur richtigen Abfrage, ändert im Entwurf das Datum auf den aktuellen Monat, exportiert nach Excel, schiebt dort ein paar Spalten zurecht, speichert die Datei mit dem Datum im Namen und hängt sie an eine Mail. Das dauert eine gute Stunde und funktioniert zuverlässig, solange die eine Person da ist. Fällt sie aus, kennt niemand sonst die Reihenfolge, und die Auswertung fällt aus.

Der zweite Effekt ist subtiler und teurer. Weil jeder Lauf ein bisschen Handarbeit enthält, ist kein Monat wie der vorherige. Mal ist eine Spalte dabei, mal nicht, mal umfasst der Zeitraum den Stichtag, mal nicht. Wer diese Dateien später vergleichen will, kann es nicht, weil die Unterschiede nicht im Datenbestand liegen, sondern in der Bedienung. Und weil das erst auffällt, wenn jemand eine Reihe über zwölf Monate aufbauen will, steckt der Fehler dann schon in zwölf Dateien.

Dabei ist die Automatisierung in Access kein Programmierprojekt. Zwei der drei nötigen Bausteine sind eingebaut und ohne Code zu bedienen: die Abfrage, die entscheidet, welche Datensätze überhaupt in den Export gehen, und der gespeicherte Export, der die Schritte des Assistenten festhält und wiederholbar macht. Der dritte Baustein ist ein Makro mit einer einzigen Aktion, das den gespeicherten Export aufruft. Erst wenn du mehrere Exporte in einer Reihenfolge oder mit wechselnden Dateinamen brauchst, kommt eine Handvoll Zeilen VBA dazu.

KI-generiertDieses Bild wurde mit KI erzeugt · Yves Hoppe / KI / cmt
Schritt für Schritt

Der Ablauf, Schritt für Schritt

Sechs Stationen von der ersten Abfrage bis zum Lauf, der ohne dich funktioniert. Die Reihenfolge ist nicht beliebig: Wer mit dem Export beginnt und die Auswahl der Datensätze nachträglich einbaut, muss den Export danach neu aufsetzen.

  1. 1

    Die Auswahl in eine gespeicherte Abfrage legen

    Bau eine Abfrage, die genau das liefert, was am Ende in der Datei stehen soll: die richtigen Spalten in der richtigen Reihenfolge, mit den Bezeichnungen, die die empfangende Seite erwartet, sortiert und auf den Zeitraum eingeschränkt. Rechnungen und Zusammenfassungen gehören ebenfalls hierhin und nicht in die Zieldatei, denn dort müsste sie jemand nach jedem Lauf erneut anlegen.

    Geschafft, wenn: Eine Abfrage, deren Ergebnis ohne weitere Handgriffe als fertige Auswertung durchgeht.

  2. 2

    Den Zeitraum ohne Rückfrage steuerbar machen

    Ersetz jede Abfrage, die beim Ausführen nach einem Wert fragt, durch eine, die ihren Zeitraum berechnet oder aus einem Feld auf einem Steuerformular liest. Ein berechneter abgeschlossener Vormonat deckt die meisten Monatsläufe ab. Wo wirklich unterschiedliche Zeiträume gebraucht werden, gehören zwei Datumsfelder auf ein Startformular, und die Abfrage verweist darauf.

    Geschafft, wenn: Die Abfrage läuft ohne Dialog durch und lässt sich trotzdem auf einen anderen Zeitraum stellen.

  3. 3

    Den Export einmal vollständig von Hand durchspielen

    Geh über die Registerkarte für externe Daten in den Exportassistenten, wähl das Format und lauf die Schritte einmal komplett durch. Sieh dir das Ergebnis danach in der Zielanwendung an und achte auf drei Dinge: Sind die Spaltenüberschriften da, stimmen die Datums- und Zahlenformate, und ist die Zeichencodierung richtig. Beim Export in eine Tabellenkalkulation setzt Access die Feldnamen immer in die erste Zeile, unabhängig davon, was du im Assistenten angibst.

    Geschafft, wenn: Ein geprüftes Exportergebnis, an dem du weißt, dass Format und Inhalt stimmen.

  4. 4

    Die Schritte speichern und an ein Makro hängen

    Setz am Ende des Assistenten das Kästchen zum Speichern der Exportschritte und vergib einen sprechenden Namen. Der Eintrag landet in der Verwaltung der gespeicherten Importe und Exporte und lässt sich dort erneut ausführen. Leg danach ein Makro an, das genau diesen Eintrag aufruft, und häng es an eine Schaltfläche auf dem Startformular. Ab hier kann den Lauf jede Person auslösen, nicht nur die, die ihn gebaut hat.

    Geschafft, wenn: Der Monatslauf ist eine Schaltfläche, und die Klickfolge steht nicht mehr in jemandes Kopf.

  5. 5

    Wechselnde Dateinamen und Mailversand in VBA nachrüsten

    Sobald der Dateiname das Datum tragen soll, tritt VBA an die Stelle des gespeicherten Exports. DoCmd.TransferSpreadsheet nimmt als Quelle auch eine Auswahlabfrage und nicht nur eine Tabelle, und beim Export muss das Argument für den Bereich leer bleiben, sonst schlägt der Vorgang fehl. Berichte gehen über DoCmd.OutputTo, das neben dem Format auch den vollständigen Zielpfad und die Zeichencodierung entgegennimmt. Soll das Ergebnis in eine Mail, übernimmt DoCmd.SendObject Anhang, Empfänger und Betreff in einem Aufruf.

    Geschafft, wenn: Ein Lauf, der die Datei selbst benennt, ablegt und auf Wunsch gleich verschickt.

  6. 6

    Den Weg zu Word und Outlook anschließen

    Für Serienbriefe startest du den Seriendruck aus Access heraus und gibst als Datenquelle dieselbe Abfrage an, die auch dem Export zugrunde liegt. Damit gibt es genau eine Stelle, an der die Auswahl der Empfänger steht. Für den Versand einzelner Berichte an wechselnde Empfänger läufst du in VBA über die Ergebnismenge und rufst je Datensatz DoCmd.SendObject auf. Wichtig ist dabei, den Versand zuerst gegen ein internes Postfach zu testen und erst danach scharf zu schalten.

    Geschafft, wenn: Brief und Mail hängen an derselben Abfrage wie die Auswertung, und niemand pflegt zwei Empfängerlisten.

Von der Abfrage zum wiederholbaren Lauf in fünf Stationen

  1. 01 Die Abfrage entscheidet, welche Spalten und welche Zeilen überhaupt in den Export gehen.
  2. 02 Das Zielformat richtet sich danach, was mit der Datei als Nächstes passiert.
  3. 03 Der gespeicherte Export hält Quelle, Ziel und Optionen fest und macht den Lauf wiederholbar.
  4. 04 Ein Makro oder eine Zeile VBA startet den Export ohne Klickfolge.
  5. 05 Word und Outlook hängen am selben Ergebnis, über Seriendruck und über den Mailversand.
Was du mitnimmst

Was du nach dieser Seite per Schaltfläche startest statt von Hand zu klicken

Sechs Punkte, die den Unterschied zwischen einem Export und einem Exportlauf ausmachen. Die ersten drei kosten dich einmalig eine halbe Stunde, danach läuft der Vorgang jeden Monat gleich.

Den Export immer an einer Abfrage festmachen

Exportier nie eine Tabelle direkt. Bau eine gespeicherte Abfrage, die Spalten auswählt, umbenennt, sortiert und den Zeitraum einschränkt, und exportier diese. Damit steht die fachliche Entscheidung an einer Stelle und ist nachlesbar, statt in den Klicks des Assistenten zu stecken. Ändert sich die Anforderung, änderst du die Abfrage, und der Export bleibt unangetastet.

Den Zeitraum nicht über eine Parameterabfrage steuern

Eine Abfrage, die beim Ausführen nach dem Zeitraum fragt, ist für Handarbeit bequem und für Automatisierung unbrauchbar, denn sie hält jeden Lauf mit einem Dialog an. Nimm stattdessen entweder einen berechneten Zeitraum, etwa den abgeschlossenen Vormonat, oder ein Feld auf einem Steuerformular, auf das die Abfrage verweist. Beides läuft ohne Rückfrage durch und ist trotzdem änderbar.

Das Zielformat nach dem nächsten Schritt wählen, nicht nach Gewohnheit

Soll das Ergebnis nur angesehen und abgelegt werden, ist ein Bericht als PDF richtig, weil Layout und Seitenumbrüche erhalten bleiben. Soll jemand damit weiterrechnen, ist eine Excel-Datei richtig. Soll ein anderes System die Daten einlesen, ist eine Textdatei mit fester Exportspezifikation richtig, weil dort Trennzeichen und Zeichencodierung festliegen. Und soll der Text weitergeschrieben werden, ist das Rich-Text-Format richtig, das sich in Word öffnen lässt.

Die Schritte des Assistenten als gespeicherten Export ablegen

Am Ende des Exportassistenten gibt es das Kästchen zum Speichern der Exportschritte. Setz es und gib dem Eintrag einen sprechenden Namen. Der gespeicherte Export merkt sich Quelle, Zielpfad, Format und die Optionen und lässt sich danach mit zwei Klicks aus der Verwaltung der gespeicherten Importe und Exporte erneut ausführen. Damit ist der Lauf schon reproduzierbar, bevor eine einzige Zeile Code entstanden ist.

Den gespeicherten Export in ein Makro heben

Ein Makro mit der Aktion zum Ausführen eines gespeicherten Import- oder Exportvorgangs braucht genau einen Parameter, nämlich den Namen des Eintrags. In VBA heißt dieselbe Sache DoCmd.RunSavedImportExport. Häng das Makro an eine Schaltfläche auf dem Startformular, und der Monatslauf ist ein Klick. Mehrere Exporte hintereinander sind mehrere Zeilen im selben Makro.

Für wechselnde Dateinamen und Mails auf VBA umsteigen

Sobald der Dateiname das Datum enthalten oder der Zielpfad wechseln soll, reicht der gespeicherte Export nicht mehr, weil er den Pfad fest hält. Dann übernehmen drei Methoden die Arbeit: DoCmd.TransferSpreadsheet für Tabellenkalkulationsdateien, DoCmd.OutputTo für Berichte und Formulare in Formaten wie PDF oder Rich Text und DoCmd.SendObject, wenn das Ergebnis direkt als Anhang in einer Mail landen soll.

Die Fehlerfälle vor dem ersten Produktivlauf durchspielen

Vier Fälle treten regelmäßig auf und lassen sich in wenigen Zeilen abfangen: Die Zieldatei ist noch geöffnet, der Zielpfad existiert nicht, die Abfrage liefert keine Zeile, und die Zeichencodierung passt nicht zum empfangenden System. Prüf vor dem Export, ob die Abfrage überhaupt Datensätze liefert, und leg den Zielpfad an, statt dich darauf zu verlassen, dass er da ist. Das ist der Unterschied zwischen einem Lauf, der etwas meldet, und einem, der stillschweigend nichts tut.

KI-generiertDieses Bild wurde mit KI erzeugt · Yves Hoppe / KI / cmt

Welches Format wofür taugt

Die Formatfrage wird meistens nach Gewohnheit entschieden und selten nach dem, was mit der Datei geschieht. Dabei ist die Antwort einfach, wenn du eine Ebene weiterdenkst. Ein Bericht, den jemand ansieht, ablegt oder ausdruckt, gehört als PDF exportiert, weil dort Layout, Gruppierungen und Seitenumbrüche erhalten bleiben und niemand versehentlich etwas verändert. Eine Auswertung, mit der weitergerechnet wird, gehört in eine Tabellenkalkulationsdatei. Und ein Bestand, den ein anderes System einliest, gehört in eine Textdatei.

Bei der Textdatei liegt der ganze Aufwand in den Einzelheiten, und genau dafür gibt es die Exportspezifikation. Darin legst du Trennzeichen, Textbegrenzer, Datums- und Zahlenformat sowie die Zeichencodierung einmal fest und gibst der Spezifikation einen Namen. Der Export ruft sie danach namentlich auf, und das empfangende System bekommt jeden Monat dieselbe Struktur. Ohne Spezifikation entscheiden die Regionaleinstellungen des Rechners mit, auf dem der Lauf gerade passiert, und das ist die häufigste Ursache dafür, dass ein Import beim Empfänger plötzlich nicht mehr funktioniert.

Für den Weg nach Word gibt es zwei verschiedene Dinge, die gern verwechselt werden. Der Export in das Rich-Text-Format erzeugt ein Dokument mit dem Inhalt eines Berichts oder einer Tabelle, das sich danach weiterbearbeiten lässt. Der Seriendruck dagegen gibt die Daten nicht als Ganzes aus, sondern setzt sie in ein bestehendes Dokument ein, einmal je Datensatz. Wer Briefe braucht, nimmt den Seriendruck. Wer einen Bericht in einen längeren Text übernehmen will, nimmt den Export.

Die drei Methoden, die den Alltag abdecken

DoCmd.TransferSpreadsheet überträgt zwischen der Datenbank und einer Tabellenkalkulationsdatei, in beide Richtungen. Für den Export gibst du als Übertragungsart den Export an, dazu den Typ der Zieldatei, den Namen der Quelle und den Dateipfad. Zwei Eigenheiten sind wichtig: Als Quelle darf statt einer Tabelle auch eine Auswahlabfrage stehen, und das Argument für den Zellbereich muss beim Export leer bleiben, denn ein Wert darin lässt den Vorgang fehlschlagen. Die Feldnamen landen beim Export in jedem Fall in der ersten Zeile.

DoCmd.OutputTo ist die Methode für alles, was ein Layout hat. Sie nimmt den Objekttyp, den Namen des Objekts, das Ausgabeformat, den vollständigen Zielpfad und einige Zusatzangaben entgegen, darunter ein Kennzeichen, ob die passende Anwendung anschließend geöffnet werden soll, sowie die Zeichencodierung für Text- und HTML-Ausgaben. Damit exportierst du Berichte als PDF, Datenblätter als Rich Text oder Formulare in ein Textformat. Für Module gilt eine Ausnahme: Sie lassen sich nur als reiner Text ausgeben.

DoCmd.SendObject verbindet beides mit dem Mailversand. Die Methode erzeugt aus einem Objekt einen Anhang im gewünschten Format und übergibt ihn zusammen mit Empfänger, Betreff und Text an das Mailprogramm. Der praktische Nutzen liegt darin, dass ein Bericht damit nicht erst auf die Festplatte geschrieben und dann von Hand angehängt werden muss. Rechne aber damit, dass Sicherheitseinstellungen im Mailprogramm den Versand zur Bestätigung vorlegen, und teste den Ablauf zuerst gegen ein Postfach im eigenen Haus.

Warum die Auswahl in die Abfrage gehört und nicht in den Export

Der häufigste Baufehler in gewachsenen Access-Anwendungen ist, dass die fachliche Entscheidung im Bedienweg steckt. Jemand exportiert eine Tabelle vollständig und löscht danach in der Zieldatei die Zeilen, die nicht gebraucht werden. Oder jemand ändert vor jedem Lauf im Entwurf der Abfrage das Kriterium. Beides funktioniert, aber es ist nicht nachlesbar, nicht wiederholbar und nicht übertragbar, und deshalb ist es genau die Stelle, an der eine Vertretung scheitert.

Die Abfrage ist der richtige Ort dafür, weil sie den Zustand speichert. Wer wissen will, welche Datensätze in der Auswertung landen, öffnet die Abfrage und liest es nach. Wer die Regel ändern muss, ändert sie dort, und der Export merkt davon nichts. Und wer denselben Datenbestand für zwei Zwecke braucht, legt eine zweite Abfrage an, statt zwei verschiedene Exportwege zu pflegen. Dass sich diese Abfrage in allen drei genannten Methoden als Quelle angeben lässt, ist genau dafür gedacht.

Für die Steuerung des Zeitraums hat sich ein Muster bewährt, das ohne Parameterabfrage auskommt. Auf dem Startformular liegen zwei Datumsfelder mit Vorbelegung, meistens der erste und der letzte Tag des Vormonats. Die Abfrage verweist in ihrem Kriterium auf diese beiden Felder. Damit läuft der Standardfall ohne jede Eingabe durch, und für den Sonderfall trägt jemand ein anderes Datum ein, ohne dass dafür der Entwurf geöffnet werden muss. Wichtig ist nur, dass das Startformular geöffnet ist, wenn die Abfrage läuft, denn sonst fragt Access doch wieder nach.

Was schiefgeht und wie du es abfängst

Der Klassiker ist die geöffnete Zieldatei. Wenn jemand die Datei vom letzten Monat noch offen hat und der Lauf sie überschreiben will, bricht der Vorgang ab. Der Ausweg ist ein Dateiname, der das Datum enthält, denn dann entsteht in jedem Lauf eine neue Datei, und ein alter Stand ist niemandem im Weg. Nebenbei löst das auch die Frage, wie du später nachvollziehst, welcher Stand wann herausgegangen ist.

Der zweite Fall ist das leere Ergebnis. Eine Abfrage, die keine Zeile liefert, erzeugt eine Datei mit Überschriften und sonst nichts, und die geht dann als Auswertung heraus, ohne dass jemand stutzt. Prüf deshalb vor dem Export, ob überhaupt Datensätze da sind, und brich mit einer verständlichen Meldung ab, wenn nicht. Das sind wenige Zeilen, und sie verhindern den Fall, in dem eine leere Datei als Ergebnis interpretiert wird.

Der dritte Fall ist die Zeichencodierung, und er fällt immer erst beim Empfänger auf. Wenn Umlaute im Zielsystem als Fragezeichen oder als zwei Zeichen ankommen, stimmt die Codierung nicht. Sowohl der Textexport als auch die Ausgabe über DoCmd.OutputTo nehmen dafür eine ausdrückliche Angabe entgegen, und die Antwort darauf gibt nicht Access, sondern das System, das die Datei einliest. Frag dort einmal nach, trag den Wert in die Exportspezifikation ein und halt ihn fest, dann ist die Frage dauerhaft erledigt.

Dazu passende Kurse

Weil der Aufbau eines wiederholbaren Exportlaufs an einer echten Datenbank am schnellsten sitzt, sind Access-Kurse zum Datentransfer in die Office-Anwendungen der kürzere Weg als das Durcharbeiten der Methodenreferenz.

Soll aus derselben Abfrage auch ein Brief entstehen, findest du bei cmt Word-Kurse für den Seriendruck mit Daten aus Access .

Wissen prüfen

Wie sicher bist du beim Thema wirklich?

Lesen fühlt sich schnell nach Können an. Ein kurzer Test zeigt dir, was davon schon sitzt und wo sich ein Kurs lohnt. Kostenlos, ohne Anmeldung, mit einer Erklärung zu jeder Antwort.

Der passende Lernpfad

Wenn du nicht nur ein Thema abhaken, sondern eine Rolle ausfüllen willst, zeigt dir der Lernpfad die Kurse in der Reihenfolge, in der sie aufeinander aufbauen.

Karrierepfad

Word: Allrounder

Word nur „irgendwie“ zu nutzen, das kostet dich jeden Tag Zeit – und lässt deine Arbeit nicht selten auch unprofessionell wirken.


Dieser Lernpfad bringt Ordnung, Tempo und Struktur in deine Arbeit mit Dokumenten. Jetzt einsteigen heißt: Schneller Arbeiten, sauber Automatisieren und jederzeit für das nächste Dokument bereit zu sein. Bevor ineffiziente Workarounds ganz zu Deiner Gewohnheit werden. Starte durch! Mit cmt

Sehr kompetenter Dozent mit einem intensiven Training welches anwendungsorientiert ist.
Power BI Grundkurs - Analyse mit Weitblick (PB 01)
Das doch recht "langweilige" Thema Excel, wurde einem sehr gut präsentiert. Durch direktes mitarbeiten wurde es einem nie langweilig.
Excel Grundkurs
Vielen Dank für die sehr informative und unterhaltsame Schulung!
Excel Grundkurs

Häufige Fragen

Kann ich eine Abfrage exportieren oder nur eine Tabelle?
Eine Abfrage geht genauso, und sie ist der bessere Weg. Sowohl der Exportassistent als auch DoCmd.TransferSpreadsheet nehmen eine Auswahlabfrage als Quelle an. Damit steht die Entscheidung, welche Spalten und welche Zeilen herausgehen, an einer nachlesbaren Stelle, und der Export selbst bleibt bei jeder Änderung unverändert.
Warum bricht mein Export in eine Tabellenkalkulation ohne erkennbaren Grund ab?
Prüf zuerst, ob im Aufruf ein Zellbereich angegeben ist. Das Argument gilt nur beim Import; beim Export lässt ein Wert darin den Vorgang fehlschlagen. Die zweite häufige Ursache ist eine geöffnete Zieldatei, die dritte ein Zielverzeichnis, das es nicht gibt. Alle drei Fälle lassen sich vor dem Aufruf abfangen.
Wie bekomme ich das aktuelle Datum in den Dateinamen?
Über VBA, denn der gespeicherte Export hält den Pfad fest und kann ihn nicht verändern. Setz den Dateinamen vor dem Aufruf aus einem festen Teil und dem formatierten Datum zusammen und übergib ihn an DoCmd.TransferSpreadsheet oder DoCmd.OutputTo. Nimm für den Datumsteil eine Schreibweise, die sich sortieren lässt, also Jahr, Monat, Tag in dieser Reihenfolge, dann steht die Ablage später von allein richtig.
Meine Abfrage fragt bei jedem Lauf nach dem Zeitraum. Wie werde ich das los?
Das ist eine Parameterabfrage, und für automatisierte Läufe ist sie ungeeignet, weil sie jeden Durchlauf mit einem Dialog anhält. Ersetz den Parameter entweder durch einen berechneten Zeitraum, etwa den abgeschlossenen Vormonat, oder durch einen Verweis auf ein Datumsfeld auf deinem Startformular. Beim Verweis auf ein Formularfeld muss dieses Formular beim Lauf geöffnet sein, sonst fragt Access weiterhin nach.
Wie hängt der Serienbrief mit dem Export zusammen?
Gar nicht, und das ist der Punkt. Beim Export entsteht eine Datei mit den Daten, beim Seriendruck werden dieselben Daten in ein bestehendes Dokument eingesetzt, einmal je Datensatz. Was beide teilen sollten, ist die Datenquelle: Gib beim Seriendruck dieselbe Abfrage an, die auch der Auswertung zugrunde liegt, dann gibt es genau eine Stelle, an der die Empfängerauswahl steht.
Brauche ich für all das VBA?
Für den größten Teil nicht. Abfrage, Exportassistent und gespeicherter Export kommen ohne Code aus, und ein Makro mit einer einzigen Aktion startet den gespeicherten Export per Schaltfläche. VBA brauchst du erst, wenn der Dateiname wechseln soll, wenn mehrere Exporte in einer bestimmten Reihenfolge laufen müssen oder wenn das Ergebnis direkt in eine Mail gehen soll.
Persönlich für dich da

Deine Ansprechpartner

Du bist dir nicht sicher, welcher Kurs oder welches Level zu dir passt? Wir beraten dich persönlich und kostenlos.

Yves Hoppe

Yves Hoppe

Weiterbildung & Beratung

Hilft dir, aus dem Office-Programm den passenden Kurs für deinen Stand zu finden.

Norbert Jansen

Norbert Jansen

Beratung & Inhouse

Plant mit dir Inhouse-Trainings, die auf eure Abläufe und euren Datenbestand zugeschnitten sind.

Den eigenen Monatslauf einmal automatisieren

Im cmt-Kurs zum Datentransfer zwischen Access und den Office-Anwendungen baust du den Weg von der Abfrage über den gespeicherten Export bis zum Serienbrief an einem eigenen Beispiel auf. Wer zuerst die Abfragen dahinter sicher beherrschen will, fängt beim Training zu Abfragen und Berichten an.