Normalerweise ist das Exportieren von Tabellen oder Abfragen als Text- oder CSV-Datei kein Problem – Sie nutzen entweder den Assistenten dazu oder verwenden die Methode TransferText des DoCmd-Objekts. Dummerweise führt dies, auch wenn es in Anwendungen bis Access 2003 funktionierte, unter neueren Versionen von Access zu einem Fehler. Warum dies geschieht und wie Sie TransferText weiter nutzen können, erläutert dieser Beitrag.
Wenn Sie einen Export der Daten einer Tabelle oder Abfrage in eine Textdatei per VBA automatisieren möchten, verwenden Sie normalerweise die TransferText-Methode des DoCmd-Objekts wie in folgendem Beispiel:
DoCmd.TransferText acExportDelim, , "tblArtikel", CurrentProject.Path & "\tblArtikel.txt"
Dies löst unter Access 2007 und jünger den Fehler aus Bild 1 aus. Anscheinend verwendet Access, wenn nichts anderes angegeben wird, entweder das Dezimaltrennzeichen oder das Texttrennzeichen als Feldtrennzeichen. Früher verwendete Access standardmäßig das Semikolon, aber Microsoft scheint hier etwas geändert zu haben. Welches Trennzeichen wird aber nun tatsächlich verwendet

Bild 1: Fehlermeldung beim Versuch, eine Tabelle mit DoCmd.TransferText ohne Angabe einer Export-Spezifikation zu exportieren
Um dies herauszufinden, habe ich probehalber das Trennzeichen in der Systemsteuerung von Windows verändert – am Fehler ändert sich dadurch jedoch nichts.
Fehlerfrei mit Export-Spezifikation
Es gibt nur eine Lösung für das Problem: Sie müssen eine Export-Spezifikation angeben. Diese ist natürlich zuvor noch zu erstellen, was sich aber durch einmaliges Durchlaufen des Export-Assistenten erledigen lässt. Dazu rufen Sie den entsprechenden Assistenten auf (unter Access 2010 etwa mit dem Ribbon-Eintrag Externe Daten|Exportieren|Textdatei) und klicken dort auf OK (nicht die Option Exportieren von Daten mit Formatierung und Layout aktivieren!). Nun klicken Sie auf die Schaltfläche Erweitert und dann auf Speichern unter. Geben Sie den gewünschten Namen für die Spezifikation an und speichern Sie die Spezifikation (s. Bild 2).

Bild 2: Speichern einer Export-Spezifikation
Den Assistenten können Sie nun abbrechen, ohne den Export durchzuführen – wir wollten nur eine beliebige Spezifikation anlegen, um diese für den Export per VBA nutzen zu können. Natürlich können Sie hier noch weitere Eigenschaften festlegen, wenn Sie diese benötigen – dies ist aber nicht Thema dieses Beitrags.
Nach dem Anlegen der Spezifikation und dem erneuten Aufruf der TransferText-Methode – diesmal unter Berücksichtigung der gespeicherten Spezifikation – gelingt auch der Export ohne Fehler:
DoCmd.TransferText acExportDelim, Spec_tblArtikel", "tblArtikel", CurrentProject.Path & "\tblArtikel.txt"
Problem: Viele Exporte
Was aber, wenn eine Anwendung sehr viele Aufrufe der TransferText-Methode enthält Sollten Sie diese in einer älteren Access-Version verwendet haben, klappte dies reibungslos. Unter Access 2007 und neuer löst jedoch jeder Text-Export ohne Spezifikation einen Fehler aus.
Wenn Sie keine Lust haben, für jede zu exportierende Tabelle oder Abfrage von Hand eine Export-Spezifikation zu erstellen, gibt es gute Nachrichten: Diese Aufgabe lässt sich auch per Code erledigen. Die Spezifikationen werden nämlich in Systemtabellen gespeichert: Die Basisinformationen landen in der Tabelle MSysIMEXSpecs und die Informationen zu den einzelnen Feldern in mehreren Datensätzen der Tabelle MSysIMEXColumns.
Im Gegensatz zu den übrigen Systemtabellen sind diese nicht geschützt und Sie können die Daten leicht per VBA hinzufügen. Es geht sogar noch weiter: Die Tabellen sind standardmäßig nicht angelegt und werden erst von Access erzeugt, wenn der Benutzer die erste Spezifikation speichert.
Sie können also den kompletten Prozess der Spezifikationserstellung per VBA abwickeln. Dabei hilft die Prozedur SpezifikationAnlegen aus Listing 1. Die Prozedur erwartet den Namen der Tabelle oder Abfrage, für welche die Export-Spezifikation erzeugt werden soll. Sie erstellt die beiden benötigten Tabellen mit entsprechenden CREATE TABLE-Abfragen und fügt auch die Primärschüssel und Indizes hinzu. Mit dem Wert 2 für die Attributes-Eigenschaft werden die hinzugefügten Tabellen auch noch als Systemtabellen gekennzeichnet.
Nur für Abonnenten
Ab hier wird’s wirklich spannend – der Rest ist exklusiv für Abonnenten.
Mit dem Abo von Access im Unternehmen bekommst du den kompletten Artikel – inklusive vollständigem Code, Beispieldatenbank und Schritt-für-Schritt-Erklärung.
So sparst du dir stundenlanges Herumprobieren, vermeidest teure Fehler in deiner Access-Anwendung und kannst Lösungen direkt in deinem Unternehmen einsetzen, statt nur darüber zu lesen.
Teste Access im Unternehmen jetzt 4 Wochen lang kostenlos: Voller Zugriff auf alle Artikel, Downloads und Beispieldatenbanken. Kein Risiko – wenn es für dich nicht passt, kündigst du einfach innerhalb der ersten vier Wochen.
Bereits Abonnent? Hier einloggen
Kostenlos & unverbindlich
Oder hast Du eine konkrete Frage zu Deiner eigenen Access-Anwendung?
Vielleicht stellt Deine Anwendung Dich vor eine Herausforderung, zu der Du bisher keine Lösung findest. Schlechte Performance, kein ausreichender Zugriffsschutz, Du bist unsicher über Dein Datenmodell oder Dein Code liefert unerklärliche Fehler?
In unserem kostenlosen Access-Audit schaut sich André Minhorst persönlich gemeinsam mit Dir Deine Lösung per Zoom an – und zeigt Dir, wo Datenmodell, VBA-Code, Ergonomie und Sicherheit Optimierungspotenzial bieten.
Jetzt kostenloses Access-Audit anfordern →