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

Zeilenumbruch in Textdatei

Forumthread: Zeilenumbruch in Textdatei

Zeilenumbruch in Textdatei
22.02.2008 17:12:00
SteffenS
Hallo Zusammen,
ich erzeuge mit Excel eine Textdatei. Nun habe ich das Problem dass wenn ich die Textdatei öffne zwischen jeder Zeile eine Leerzeile eingefügt wird.
Schaue ich mir die Datei im Editor an so sind keine Leerzeilen drin.
Wie kommt so etwas?
Danke schonmal
Steffen Schmerler
Hier mein Code zum nachvollziehen
Dim ADMALLG, WMenu, WSPDat As Worksheet
Set WMenu = Workbooks(ThisWorkbook.Name).Sheets("Leer")
Set ADM = Workbooks(admin_datei).Sheets("bt_admin")
Set ADMALLG = Workbooks(ThisWorkbook.Name).Sheets("adm_einst")
Set WSPDat = Workbooks(plausi_dat).Sheets("pls_1")
Dim last_cell As Long
last_cell = WSPDat.Cells(Rows.Count, 1).End(xlUp).Row - 3
Dim EDatei, Trennzeichen, EKons, PLS_G, PLS_U As String
EDatei = ADMALLG.Range("O241").Value
Trennzeichen = ";"
Dim leitzeile As Long
leitzeile = 0
Dim D As Integer
D = FreeFile
Dim datwert As String
Open EDatei For Append As #D 'Append zum Anhängen der Dateien
'Allgemeine Daten einsetzen
For i = 12 To last_cell
If WSPDat.Cells(i, 5).Value <> "" And WSPDat.Cells(i, 8).Value = Marke Then
'Abfrage Leitzeile
If IsNumeric(WSPDat.Cells(i, 255).Value) = True And WSPDat.Cells(i, 255).Value > 0 Then
leitzeile = WSPDat.Cells(i, 255).Value
strTemp = leitzeile & Trennzeichen
Else
strTemp = i & Trennzeichen
End If
For j = 4 To 20
datwert = Replace(WSPDat.Cells(i, j).Value, Chr(10), " ")
strTemp = strTemp & datwert & Trennzeichen
Next j
Print #D, strTemp
strTemp = ""
End If
Next i
Close #D

Anzeige

1
Beitrag zum Forumthread
Beitrag zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Zeilenumbruch in Textdatei
22.02.2008 17:57:36
Erich
Hallo Steffen,
zunächst zwei Tipps:
"Option Explicit" ist fast immer zu empfehlen, siehe http://www.online-excel.de/excel/singsel_vba.php?f=4
Wenn du
Dim a, b as integer schreibst, ist a KEIN Integer, sondern Variant. Du musst schreiben:
Dim a as integer, b as integer
In den folgenden Code habe ich oben einige Zeilen mit "Const ..." geschrieben.
Ich vermute, diese Variablen werden bei dir an anderer Stelle (evtl. global) deklariert
und mit einem Wert belegt. Dann kannst du diese Zeilen löschen.

Option Explicit  ' (fast) immer zu empfehlen
Sub aaa()
Dim ADMALLG As Worksheet, WMenu As Worksheet, WSPDat As Worksheet
Dim last_cell As Long
Dim EDatei As String, Trennzeichen As String, EKons As String
Dim PLS_G As String, PLS_U As String
'   Dim leitzeile As Long
Dim datwert As String
Dim D As Integer
Dim ADM As Worksheet
Dim i As Long, j As Integer
Dim strTemp As String
Const admin_datei As String = "adm.xls"   ' global ?
Const plausi_dat As String = "plaus.xls"  ' global ?
Const marke As String = "MARK"            ' global ?
Set WMenu = Workbooks(ThisWorkbook.Name).Sheets("Leer")
Set ADM = Workbooks(admin_datei).Sheets("bt_admin")
Set ADMALLG = Workbooks(ThisWorkbook.Name).Sheets("adm_einst")
Set WSPDat = Workbooks(plausi_dat).Sheets("pls_1")
last_cell = WSPDat.Cells(Rows.Count, 1).End(xlUp).Row - 3
EDatei = ADMALLG.Range("O241").Value
Trennzeichen = ";"
'   leitzeile = 0
D = FreeFile
Open EDatei For Append As #D 'Append zum Anhängen der Dateien
'Allgemeine Daten einsetzen
With WSPDat
For i = 12 To last_cell
If .Cells(i, 5).Value  "" And .Cells(i, 8).Value = marke Then
'Abfrage Leitzeile
If IsNumeric(.Cells(i, 255)) And .Cells(i, 255) > 0 Then
strTemp = .Cells(i, 255) & Trennzeichen
Else
strTemp = i & Trennzeichen
End If
For j = 4 To 20
datwert = Replace(.Cells(i, j).Value, vbCrLf, " ") ' chr(13) & chr(10)
datwert = Replace(datwert, vbCr, " ")  ' chr(13)
datwert = Replace(datwert, vbLf, " ")  ' chr(10)
strTemp = strTemp & datwert & Trennzeichen
Next j
Print #D, strTemp
strTemp = ""
End If
Next i
End With
Close #D
End Sub

Rückmeldung wäre nett! - Grüße von Erich aus Kamp-Lintfort

Anzeige
;
Anzeige
Anzeige

Infobox / Tutorial

Zeilenumbruch in Textdatei mit Excel VBA beheben


Schritt-für-Schritt-Anleitung

Um das Problem der zusätzlichen Leerzeilen in einer Textdatei zu beheben, kannst Du die folgenden Schritte befolgen:

  1. Öffne den VBA-Editor in Excel mit ALT + F11.

  2. Finde den relevanten Code, der die Textdatei erstellt. In diesem Fall ist es der Code, der die Daten in die Datei schreibt.

  3. Ersetze den Zeilenumbruch durch einen Leerzeichen. Im Code von Erich sieht es so aus:

    datwert = Replace(WSPDat.Cells(i, j).Value, vbCrLf, " ") ' chr(13) & chr(10)
    datwert = Replace(datwert, vbCr, " ")  ' chr(13)
    datwert = Replace(datwert, vbLf, " ")  ' chr(10)

    Dieser Code entfernt die Zeilenumbrüche aus den Zellen.

  4. Speichere die Änderungen und schließe den Editor.

  5. Führe das Makro erneut aus, um die Textdatei zu erstellen und überprüfe, ob das Problem gelöst ist.


Häufige Fehler und Lösungen

Einige häufige Fehler, die auftreten können, sind:

  • Falsche Datentypen: Achte darauf, dass Variablen wie a und b korrekt als Integer deklariert sind:

    Dim a As Integer, b As Integer
  • Globale Variablen: Wenn Du globale Variablen verwendest, stelle sicher, dass sie korrekt deklariert sind. Zum Beispiel:

    Const admin_datei As String = "adm.xls"
  • Leere Zellen: Wenn Deine Zellen leer sind, achte darauf, dass der Code diese Fälle korrekt behandelt, um Fehler beim Ausführen zu vermeiden.


Alternative Methoden

Falls das Problem weiterhin besteht, kannst Du auch folgende alternative Methoden in Betracht ziehen:

  • Verwendung von Text-Import-Assistent: Statt die Datei direkt zu erstellen, kannst Du die Daten in Excel importieren und dabei die Leerzeilen ignorieren.
  • Power Query: Nutze Power Query, um die Daten zu transformieren und unnötige Leerzeilen zu entfernen, bevor Du sie exportierst.

Praktische Beispiele

Hier ist ein einfaches Beispiel, das zeigt, wie man mit VBA eine Textdatei erstellt und gleichzeitig Leerzeilen vermeidet:

Sub ExportData()
    Dim strTemp As String
    Dim datwert As String
    Dim D As Integer
    D = FreeFile
    Open "C:\DeinPfad\deineDatei.txt" For Output As #D
    For i = 1 To 10
        datwert = "Beispieltext " & i
        strTemp = Replace(datwert, vbCrLf, " ")
        Print #D, strTemp
    Next i
    Close #D
End Sub

In diesem Beispiel wird der Text ohne zusätzliche Leerzeilen in die Datei geschrieben.


Tipps für Profis

  • Option Explicit: Nutze Option Explicit am Anfang Deiner Module, um sicherzustellen, dass alle Variablen deklariert sind. Dies hilft, Fehler zu vermeiden.

  • Debugging: Setze Breakpoints und verwende die Debugging-Tools in VBA, um den Code Schritt für Schritt zu durchlaufen und Fehler zu finden.

  • Dokumentation: Halte Deinen Code gut dokumentiert, damit Du und andere Benutzer später besser nachvollziehen können, was der Code macht.


FAQ: Häufige Fragen

1. Warum erscheinen Leerzeilen in meiner Textdatei? Die Leerzeilen können durch Zeilenumbrüche in den Daten verursacht werden. Durch das Ersetzen von vbCrLf mit einem Leerzeichen kannst Du dieses Problem lösen.

2. Wie kann ich sicherstellen, dass meine Variablen korrekt deklariert sind? Verwende Option Explicit, um sicherzustellen, dass alle Variablen deklariert werden müssen. So vermeidest Du unbeabsichtigte Fehler.

3. Gibt es eine Möglichkeit, die Ausgabe direkt in Excel zu sehen? Ja, Du kannst die Daten auch direkt in ein Arbeitsblatt exportieren, anstatt sie in eine Textdatei zu schreiben. Verwende dazu die Cells-Objekte in VBA.

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige