Live-Forum - Die aktuellen Beiträge
Anzeige
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender

Forumthread: CSV erstellen ohne Umbruch in letzter Zeile

CSV erstellen ohne Umbruch in letzter Zeile
01.10.2007 14:24:00
AndreasKehr
Hallo an alle,
ich benötige mal wieder eue Hilfe.
Mittels einem Makro erstelle ich aus einem Bestimmten Arbeitsblatt eine CSV-Datei die unter Stammdaten.txt abgespeichert wird. In dieser Datei darf in der letzten Zeile kein Zeilenumbruch mehr stattfinden. Diese Datei wird weiterverarbeitet und dadurch kommt es zu Fehlermeldungen.
Hier mal das benutzte Makro:

Sub SaveCSV_test()
' Speichert den Inhalt eines Arbeitsblatts als CSV-Datei
' in vier unterschiedliche verzeichnisse
' 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")
' Namen und Speicherpfad wählen
strDateiname = "\\Datsi\Datsi-Druck-Prod\MDE-Prod\MDE01_kehr\stammdaten.txt"
If strDateiname = "" Then Exit Sub
'strTrennzeichen = Angabe des vTrennzeichens
strTrennzeichen = ";"
If strTrennzeichen = "" Then Exit Sub
'Zu exportierender Bereich festlegen
Set Bereich = Worksheets("scanner_stamm").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


Die erstellte txt Datei sieht folgendermassen aus:
0104250220300190;12;A33 A2 ;500
0104250220300275;12;A38 A1 ;450
0104250220300305;12;A38 A2 ;450
0104250220300343;12;A43 A1 ;350
0104250220300374;12;A43 A2 ;350

Ich hoffe ihr könnt mir helfen
Grüsse Andreas

Anzeige

2
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: CSV erstellen ohne Umbruch in letzter Zeile
02.10.2007 11:54:17
Luschi
Hallo Andreas,
habe mal ein bischen gestestet, aber mit Vba-Mitteln habe ich die letzte Leerzeile auch nicht wegbekommen.
In VB6 gibt es ein ByteArray-Objekt: dahinein kann man 1 Datei einlesen und auch wieder in 1 Datei schreiben. Hiermit ist es möglich Bytes aus- und abzuschneiden, so daß in der neuen Datei eben die letzten 2 Bytes fehlen. Excel hängt eben am Schluß der Datei noch 2 Steuerzeichen (13 und 10) automatisch an, die nun dem Fremdprogramm stören.
Leider hat M$ viele Möglichkeiten von Vb6 nicht in Vba umgesetzt. Ich bin am Donnerstag wieder an meinem Heim-PC und ich schicke Dir dann eine exe-Datei, die die letzten Zeichen abklemmt und die Du in Deinem Vba-Code einbinden kannst.
Gruß von Luschi
aus klein-Paris

Anzeige
AW: CSV erstellen ohne Umbruch in letzter Zeile
02.10.2007 12:23:47
Harry
Hallo Andreas,
mit "Print #1, strTemp;" (beachte Semikolon am Ende) schreibst du ohne Zeilenumbruch.
D.h. entweder prüfe auf letzte Zeile und schreibe dann mit oder ohne Semikolon oder schreibe sinngemäß

bolErsteZeile = true
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)
If bolErsteZeile then
bolErsteZeile = false
Else
Print #1,  ' Erzeugt neue Leerzeile, da vorangegange nicht mit Zeilenumbruch
' abgeschlossen wurde, erzeugt dies hier quasi nur den
' Zeilenumbruch des vorangegangen Datensatzes
End If
Print #1, strTemp;  ' Achtung - mit Semikolon
strTemp = ""
Next


Siehe Hilfe zu Befehl "Print" - Argument "ZeichenPos"
Gruß
Harry

Anzeige
;

Forumthreads zu verwandten Themen

Entdecke relevante Threads

Schau dir verwandte Threads basierend auf dem aktuellen Thema an

Alle relevanten Threads mit Inhaltsvorschau entdecken
Anzeige
Anzeige

Infobox / Tutorial

CSV-Datei ohne Umbruch in der letzten Zeile erstellen


Schritt-für-Schritt-Anleitung

Um eine CSV-Datei aus einem Excel-Arbeitsblatt zu erstellen, ohne dass ein Zeilenumbruch in der letzten Zeile vorhanden ist, kannst du folgendes VBA-Makro verwenden. Füge den Code in ein Modul in Excel ein und passe die Parameter entsprechend an.

Sub SaveCSV_Test()
    Dim Bereich As Object, Zeile As Object, Zelle As Object
    Dim strTemp As String
    Dim strDateiname As String
    Dim strTrennzeichen As String
    Dim bolErsteZeile As Boolean
    strDateiname = "\\Datsi\Datsi-Druck-Prod\MDE-Prod\MDE01_kehr\stammdaten.txt"
    strTrennzeichen = ";"

    Set Bereich = Worksheets("scanner_stamm").UsedRange
    Open strDateiname For Output As #1
    bolErsteZeile = True

    For Each Zeile In Bereich.Rows
        For Each Zelle In Zeile.Cells
            If InStr(1, Zelle.Text, strTrennzeichen) > 0 Then
                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)

        If bolErsteZeile Then
            bolErsteZeile = False
        Else
            Print #1,  ' Verhindert Zeilenumbruch für die vorherige Zeile
        End If

        Print #1, strTemp;  ' Semikolon am Ende sorgt dafür, dass kein Umbruch erfolgt
        strTemp = ""
    Next

    Close #1
    Set Bereich = Nothing
    MsgBox "Datei wurde exportiert nach " & strDateiname
End Sub

Häufige Fehler und Lösungen

  1. Zeilenumbruch in der letzten Zeile

    • Wenn du einen Zeilenumbruch in der letzten Zeile bekommst, überprüfe, ob das Semikolon am Ende der Print #1, strTemp; Anweisung gesetzt ist. Das Semikolon verhindert den Zeilenumbruch.
  2. Datei wird nicht erstellt

    • Stelle sicher, dass der angegebene Pfad für die Datei korrekt ist und dass du die erforderlichen Berechtigungen hast, um in dieses Verzeichnis zu schreiben.
  3. Verwendung des falschen Trennzeichens

    • Achte darauf, dass das Trennzeichen in strTrennzeichen korrekt gesetzt ist, z.B. auf ";" für CSV-Dateien.

Alternative Methoden

Wenn du keine VBA-Makros verwenden möchtest, kannst du die Daten auch manuell als CSV speichern:

  1. Wähle den Bereich aus, den du exportieren möchtest.
  2. Kopiere die Daten (Strg + C).
  3. Öffne einen Texteditor (z.B. Notepad).
  4. Füge die Daten ein (Strg + V).
  5. Speichere die Datei mit der Endung .csv.

Diese Methode ist jedoch weniger flexibel und erfordert manuelle Anpassungen, um sicherzustellen, dass kein Zeilenumbruch in der letzten Zeile entsteht.


Praktische Beispiele

Angenommen, du hast ein Arbeitsblatt mit folgendem Inhalt:

ID;Name;Alter
1;Max;30
2;Anna;25

Nach dem Ausführen des Makros wird die stammdaten.txt Datei ohne einen Umbruch in der letzten Zeile folgendermaßen aussehen:

1;Max;30
2;Anna;25

Die letzte Zeile endet direkt nach den Daten.


Tipps für Profis

  • Teste dein Makro immer mit einer Kopie der Daten, um sicherzustellen, dass keine Daten verloren gehen.
  • Nutze Debug.Print in deinem Code, um die Ausgabe in der Immediate-Fenster von VBA zu überprüfen, bevor du die Datei schreibst.
  • Überlege, das Makro so zu erweitern, dass es auch die Möglichkeit bietet, verschiedene Trennzeichen auszuwählen, um die Flexibilität zu erhöhen.

FAQ: Häufige Fragen

1. Wie kann ich das Trennzeichen ändern? Du kannst das Trennzeichen ändern, indem du den Wert von strTrennzeichen anpasst, z.B. strTrennzeichen = "," für ein Komma.

2. Funktioniert das Makro in Excel 2016? Ja, das Makro sollte in Excel 2016 und höheren Versionen problemlos funktionieren, solange die VBA-Umgebung aktiviert ist.

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Entdecke mehr
Finde genau, was du suchst

Die erweiterte Suchfunktion hilft dir, gezielt die besten Antworten zu finden

Suche nach den besten Antworten
Unsere beliebtesten Threads

Entdecke unsere meistgeklickten Beiträge in der Google Suche

Top 100 Threads jetzt ansehen
Anzeige