Anzeige
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender

Forumthread: Export CSV File per Makro

Export CSV File per Makro
Thorsten
Hallo Experten,
ich habe ein Problem und suche eine Lösung.
Beim Speichern einer Datei als CSV manuell über Daie/Speichern werden die Daten in dem CSV File mit einem Semikolon (;) getrennt. Beim speichern über VBA wird das CSV mit einem Komma (,) getrennt.
ActiveWorkbook.SaveAs Filename:=Dateiname, FileFormat:=xlCSVMSDOS, CreateBackup:=False
Wie kann ich das CSV File über eine Makro erstellen, in dem die einzelnen Spöaten mit einem Semikolon (;) getrennt sind?
Danke für Eure Hilfe
Gruß
thoboe
Anzeige

5
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Benutzer
Anzeige
AW: Export CSV File per Makro
10.11.2009 11:45:57
Oberschlumpf
Hi Thorsten
Geht das hier (ungetestet, weil hab deine CSV-Datei nicht)
Sub sbSeperator()
Dim lstrZeile As String
Open "DeinPfad\Deine-CSV-Datei" For Input As #1
Open "DeinPfad\dummy.txt" For Output As #2
Do Until Eof(1)
Line Input #1, lstrZeile
lstrZeile = Replace(lstrZeile, ",", ";")
Print #2, lstrZeile
Loop
Close
Kill "DeinPfad\Deine-CSV-Datei"
Name "DeinPfad\dummy.txt", "DeinPfad\Deine-CSV-Datei"
End Sub
Hilfts?
Ciao
Thorsten
Anzeige
AW: Export CSV File per Makro
10.11.2009 11:46:15
Worti
Hi Thorsten,
vielleicht hilft dir das weiter:
'***********************************************************************************************
' Autor: Worti *
' Datum 23.05.2007 *
' Aufgabe: Exportiere vorgegebenen Bereich als CSV-Datei mit vorgebbarem Trennzeichen *
'***********************************************************************************************
Sub Exportiere_Bereich_in_CSV()
Dim bisZeile As Long, zeile As Long
Dim bisSpalte As Integer, Spalte As Integer
Dim Trennzeichen As String, ExportBereich As String, Ausgabe As String
Dim NewFileName
Close #1
NewFileName = Application.GetSaveAsFilename(fileFilter:="CSV Files (*.csv), *.csv")
If NewFileName  False Then
Open NewFileName For Output As #1
' Hier Trennzeichen eingeben
Trennzeichen = InputBox("Bitte geben Sie das gewünschte Trennzeichen ein: ", " _
Trennzeichen", ";")
If Trennzeichen = "" Then
'Standard-Trennzeichen Semikolon
Trennzeichen = ";"
End If
'Zu exportierender Bereich
ExportBereich = InputBox("Bitte den zu exportierenden bereich eingeben: ", "Bereich",  _
ActiveSheet.UsedRange.Address(False, False))
If ExportBereich = "" Then
'Wenn leer, dann benutzten Bereich exportieren
ExportBereich = ActiveSheet.UsedRange.Address
End If
bisZeile = ActiveSheet.Range(ExportBereich).Rows.Count + ActiveSheet.Range(ExportBereich) _
.Row - 1
bisSpalte = ActiveSheet.Range(ExportBereich).Columns.Count + ActiveSheet.Range( _
ExportBereich).Column - 1
For zeile = ActiveSheet.Range(ExportBereich).Row To bisZeile
Ausgabe = ""
For Spalte = ActiveSheet.Range(ExportBereich).Column To bisSpalte
Ausgabe = Ausgabe & ActiveSheet.Cells(zeile, Spalte).Value
If Spalte  bisSpalte Then
Ausgabe = Ausgabe & Trennzeichen
End If
Next Spalte
Print #1, Ausgabe
Next zeile
Close #1
End If
End 

Sub
Gruß Worti

Anzeige
AW: Export CSV File per Makro
10.11.2009 11:57:21
Thorsten
Danke für die Hilfe!
Der Ansatz von Worti hat mich auf den richtigen Weg gebracht.
Gruß
Thorsten
Per VBA : Parameter LOCAL:=TRUE
10.11.2009 20:08:04
NoNet
Hallo Thorsten,
das lässt sich per VBA einfacher lösen :
Schau Dir mal die Onlinehilfe zu ActiveWorkbook.SaveAs an :
Dort existiert (zumindest unter Excel 2003 - bei XP bin ich nicht ganz sicher !) das Argument LOCAL:=TRUE, damit erreichst Du, dass das lokale Trennzeichen der Systemsteuerung verwendet wird, in deutschen Excel-Versionen also standardmäßig das Semikolon !
Gruß, NoNet
Anzeige
AW: Per VBA : Parameter LOCAL:=TRUE
11.11.2009 11:10:28
Camba
Ich hab dazu auch was,
damit kannst du sogar auswählen was für ein trennzeichen du setzen möchtest
Sub SaveCSV()
' Speichert den Inhalt eines Arbeitsblatts als CSV-Datei
' mit wählbarem Trennzeichen und Maskierung von Einträgen
Dim Bereich As Object, Zeile As Object, Zelle As Object
Dim strTemp As String
Dim strDateiname As String
Dim strTrennzeichen As String
Dim strMappenpfad As String
strMappenpfad = ActiveWorkbook.FullName
strMappenpfad = Replace(strMappenpfad, ".xls", ".csv")
strDateiname = InputBox("Wie soll die CSV-Datei heißen (inkl. Pfad)?", "CSV-Export",  _
strMappenpfad)
If strDateiname = "" Then Exit Sub
strTrennzeichen = InputBox("Welches Trennzeichen soll verwendet werden?", "CSV-Export", ",")
If strTrennzeichen = "" Then Exit Sub
Set Bereich = ActiveSheet.UsedRange
Open strDateiname For Output As #1
For Each Zeile In Bereich.Rows
For Each Zelle In Zeile.Cells
If InStr(1, Zelle.Text, strTrennzeichen) > 0 Then
'Zellen, die ein Trennzeichen beinhalten in Anführungsstriche setzen
strTemp = strTemp & """" & CStr(Zelle.Text) & """" & strTrennzeichen
Else
strTemp = strTemp & CStr(Zelle.Text) & strTrennzeichen
End If
Next
If Right(strTemp, 1) = strTrennzeichen Then strTemp = Left(strTemp, Len(strTemp) - 1)
Print #1, strTemp
strTemp = ""
Next
Close #1
Set Bereich = Nothing
MsgBox "Datei wurde exportiert nach" & vbCrLf & strDateiname
End Sub

Anzeige
;

Forumthreads zu verwandten Themen

Anzeige
Anzeige
Anzeige

Infobox / Tutorial

CSV-Datei per Makro in Excel exportieren


Schritt-für-Schritt-Anleitung

Um eine CSV-Datei per Makro in Excel zu exportieren, kannst du die folgenden Schritte befolgen:

  1. Öffne Excel und drücke ALT + F11, um den VBA-Editor zu öffnen.

  2. Füge ein neues Modul hinzu: Klicke mit der rechten Maustaste auf "VBAProject (deine Arbeitsmappe)" > Einfügen > Modul.

  3. Füge den folgenden Code ein: Dieser Code speichert den aktiven Arbeitsbereich als CSV-Datei mit dem gewünschten Trennzeichen.

    Sub Exportiere_Bereich_in_CSV()
        Dim bisZeile As Long, zeile As Long
        Dim bisSpalte As Integer, Spalte As Integer
        Dim Trennzeichen As String, ExportBereich As String, Ausgabe As String
        Dim NewFileName
    
        NewFileName = Application.GetSaveAsFilename(fileFilter:="CSV Files (*.csv), *.csv")
        If NewFileName = False Then Exit Sub
    
        Open NewFileName For Output As #1
        ' Hier Trennzeichen eingeben
        Trennzeichen = InputBox("Bitte geben Sie das gewünschte Trennzeichen ein: ", "Trennzeichen", ";")
        If Trennzeichen = "" Then Trennzeichen = ";"
    
        ExportBereich = InputBox("Bitte den zu exportierenden Bereich eingeben: ", "Bereich", ActiveSheet.UsedRange.Address(False, False))
        If ExportBereich = "" Then ExportBereich = ActiveSheet.UsedRange.Address
    
        bisZeile = ActiveSheet.Range(ExportBereich).Rows.Count + ActiveSheet.Range(ExportBereich).Row - 1
        bisSpalte = ActiveSheet.Range(ExportBereich).Columns.Count + ActiveSheet.Range(ExportBereich).Column - 1
    
        For zeile = ActiveSheet.Range(ExportBereich).Row To bisZeile
            Ausgabe = ""
            For Spalte = ActiveSheet.Range(ExportBereich).Column To bisSpalte
                Ausgabe = Ausgabe & ActiveSheet.Cells(zeile, Spalte).Value
                If Spalte <> bisSpalte Then Ausgabe = Ausgabe & Trennzeichen
            Next Spalte
            Print #1, Ausgabe
        Next zeile
        Close #1
    End Sub
  4. Führe das Makro aus: Kehre zu Excel zurück und drücke ALT + F8, wähle das Makro Exportiere_Bereich_in_CSV und klicke auf "Ausführen".


Häufige Fehler und Lösungen

  • Fehler beim Speichern: Wenn du beim Speichern auf einen Fehler stößt, überprüfe den Dateipfad und stelle sicher, dass der Name keine ungültigen Zeichen enthält.

  • Trennzeichen nicht wie gewünscht: Wenn das Trennzeichen nicht korrekt ist, überprüfe den InputBox-Wert für das Trennzeichen. Stelle sicher, dass du das gewünschte Trennzeichen eingibst.


Alternative Methoden

Eine einfachere Methode, um eine CSV-Datei zu exportieren, ist die Verwendung des ActiveWorkbook.SaveAs-Befehls mit dem LOCAL:=TRUE-Argument, das das lokale Trennzeichen verwendet. Hier ein Beispiel:

ActiveWorkbook.SaveAs Filename:="DeinPfad\DeinDateiname.csv", FileFormat:=xlCSV, Local:=True

Diese Methode ist ideal, wenn du in einer Umgebung arbeitest, in der das lokale Trennzeichen bereits auf Semikolon eingestellt ist.


Praktische Beispiele

  1. CSV-Datei mit Semikolon als Trennzeichen exportieren:

    Verwende den oben genannten Code und setze das Trennzeichen auf ; in der InputBox.

  2. CSV-Datei mit benutzerdefiniertem Trennzeichen:

    Ändere den Code, um z.B. ein Komma oder ein anderes Zeichen als Trennzeichen zu nutzen, indem du es in der InputBox eingibst.


Tipps für Profis

  • Automatische Dateinamen: Du kannst den Dateinamen dynamisch gestalten, z.B. das aktuelle Datum anhängen:

    strDateiname = "Export_" & Format(Date, "YYYYMMDD") & ".csv"
  • Fehlerbehandlung: Implementiere Fehlerbehandlung in deinem Makro, um unerwartete Probleme abzufangen, z.B.:

    On Error GoTo Fehlerbehandlung
  • Für größere Datenmengen: Achte darauf, dass die Methode effizient bleibt, um bei großen Datenmengen die Leistung zu optimieren.


FAQ: Häufige Fragen

1. Wie kann ich ein Excel-Blatt als CSV exportieren?
Du kannst das Makro Exportiere_Bereich_in_CSV verwenden, um einen bestimmten Bereich oder das gesamte Blatt als CSV zu exportieren.

2. Was ist der Unterschied zwischen xlCSV und xlCSVMSDOS?
xlCSV verwendet das Standard-Trennzeichen, während xlCSVMSDOS speziell für MS-DOS-kompatible Trennzeichen verwendet wird. Wähle je nach Bedarf das passende Format.

3. Kann ich das Trennzeichen im VBA-Code festlegen?
Ja, du kannst den Wert für das Trennzeichen im Code festlegen, anstatt es über die InputBox abzufragen.

4. Wie kann ich ein Makro in Excel speichern?
Du kannst dein Makro speichern, indem du die Datei im Format .xlsm (Excel-Makro-fähige Arbeitsmappe) speicherst.

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige