Wenn der Export nicht mehr nerven soll
Du kennst das Spiel.
Access-Export nach Excel – mit Umwegen.
CSV-Export – ohne Zeichensatzwahl, ohne Steuerung.
Und danach: Formatieren per Hand, Spalten löschen, Sonderzeichen korrigieren.
Geht besser.
Geht sauberer.
Geht automatisiert.
Varianten für sauberen Datenexport
Ziel | Methode |
---|---|
Excel mit Formatierung | Excel-Objektmodell (VBA) |
Excel ohne Formatierung | DoCmd.TransferSpreadsheet |
CSV mit Steuerung | FileSystemObject + VBA |
SQL → CSV | bcp oder FORMAT() in T-SQL |
Export nach Excel: einfach und schnell
Standardmethode in Access:
DoCmd.TransferSpreadsheet acExport, acSpreadsheetTypeExcel12Xml, _
"qryKundenExport", _
"C:\Temp\Kunden.xlsx", _
True
Was Du bekommst:
- Reine Daten
- Spaltenüberschriften
- Keine Formatierung
Tipp: Nutze vorab eine gezielte Abfrage mit sprechenden Spaltennamen.
Dann musst Du später nichts anfassen.
Export mit Formatierung: Excel-Objektmodell
Wenn das Layout stimmen soll:
Sub ExportNachExcelFormatiert()
Dim xlApp As Object
Dim xlWB As Object
Dim xlWS As Object
Dim rs As DAO.Recordset
Dim i As Integer
Dim Zeile As Long
Set rs = CurrentDb.OpenRecordset("qryKundenExport", dbOpenSnapshot)
Set xlApp = CreateObject("Excel.Application")
Set xlWB = xlApp.Workbooks.Add
Set xlWS = xlWB.Sheets(1)
' Überschriften
For i = 0 To rs.Fields.Count - 1
xlWS.Cells(1, i + 1).Value = rs.Fields(i).Name
xlWS.Cells(1, i + 1).Font.Bold = True
Next i
Zeile = 2
Do While Not rs.EOF
For i = 0 To rs.Fields.Count - 1
xlWS.Cells(Zeile, i + 1).Value = rs.Fields(i).Value
Next i
Zeile = Zeile + 1
rs.MoveNext
Loop
xlWS.Columns.AutoFit
xlWB.SaveAs "C:\Temp\KundenFormatiert.xlsx"
xlWB.Close False
xlApp.Quit
Set xlWS = Nothing
Set xlWB = Nothing
Set xlApp = Nothing
rs.Close
End Sub
Kostet etwas mehr Code.
Bringt aber ein Excel, das Du direkt verschicken kannst.
CSV-Export mit voller Kontrolle
Access kann CSV – aber ohne Zeichensatzwahl.
Wenn Du mehr willst, nimm VBA und FileSystemObject.
Beispiel:
Sub ExportNachCSV()
Dim rs As DAO.Recordset
Dim fso As Object
Dim txt As Object
Dim i As Integer
Dim line As String
Set rs = CurrentDb.OpenRecordset("qryKundenExport", dbOpenSnapshot)
Set fso = CreateObject("Scripting.FileSystemObject")
Set txt = fso.CreateTextFile("C:\Temp\Kunden.csv", True, True) ' True = Unicode
' Kopfzeile
For i = 0 To rs.Fields.Count - 1
line = line & """" & rs.Fields(i).Name & """;"
Next i
txt.WriteLine Left(line, Len(line) - 1)
' Datenzeilen
Do While Not rs.EOF
line = ""
For i = 0 To rs.Fields.Count - 1
line = line & """" & rs.Fields(i).Value & """;"
Next i
txt.WriteLine Left(line, Len(line) - 1)
rs.MoveNext
Loop
txt.Close
rs.Close
End Sub
Damit steuerst Du Zeichensatz, Trenner und Format komplett selbst.
SQL Server → CSV per T-SQL
Auch per SQL kannst Du saubere CSV erzeugen.
Ideal für geplante Exporte.
Beispiel:
SELECT
CONCAT_WS(';',
'"' + Name + '"',
FORMAT(Geburtstag, 'dd.MM.yyyy'),
FORMAT(Umsatz, '#,##0.00')
) AS CSVZeile
FROM dbo.Kunden
Oder ganz technisch mit bcp
-Tool:
bcp "SELECT * FROM dbo.Kunden" queryout Kunden.csv -c -t; -T -S meinserver
Damit läuft der Export direkt vom Server – ohne Access.
Format-Tipps für mehr Klarheit
- Trenne sauber mit Semikolon
;
, nicht Komma (wegen Dezimaltrennzeichen) - Nutze
"
um Textfelder - Konvertiere NULL-Werte vorher zu leeren Strings
- Speichere im UTF-8 oder UTF-16 für Umlaut-Kompatibilität
Mein Fazit
Export muss nicht hakelig sein.
Du kannst Dir mit wenigen Zeilen VBA saubere Dateien bauen – automatisiert, robust, formatiert.
Und wenn’s aus SQL kommen soll: geht auch.
Wenn Du willst, setze ich Dir einen Export zusammen, der ohne Klick jeden Abend läuft.
Dann bekommst Du saubere Daten – norddeutsch still und zuverlässig.
No responses yet