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

Forumthread: VBA > Text keinen Zeilenumbruch

VBA > Text keinen Zeilenumbruch
18.01.2009 01:55:08
Gopla
Hallo liebe Gemeinschaft,
ich habe ein Problem, dessen ich nicht Herr werde und welches schwer zu beschreiben ist:
Ich habe einen Text.txt, welcher in VBA durch
intHandle = FreeFile
Open "C:\test.txt" For Input As #intHandle
geöffnet wird und anschließend durch
Line Input #intHandle, strOneLine
arOneLine = Split(strOneLine, ",")
zerlegt wird.
diese Prozedur funktioniert völlig problemlos mit meinen "normalen" Texten.
Jedoch tauchen bei anderen .txt Datei das Problem auf, das diese zwar im Editor gelistet angezeigt werden und am Ende jeder Zeile ein rechteckiges Steuerzeichen besitzen (welches sich hier auch nicht pasten lässt, da nur der Cursor eine Zeile tiefer rutscht)
Ich vermute es handelt sich dabei um Chr(10) oder Chr(13).
Ich habe dieses Zeichen als Grund für die Problem beim Einlesen via VBA ausgemacht, da dadurch der gesamte Text durch VBA nur als eine Zeile angesehen wird.
(Wenn ich das Zeichen entferne, ruscht die nachfolgende Zeile an das Ende der vorhergehende)
Meine Frage:
Wie kann ich VBA erklären, das mit dem Zeichen eine neue Zeile beginnt?
Ich hoffe mein Problem gut genug geschildert zu haben und bedanke mich im voraus für die Hilfen.
Gopla
Anzeige

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

Betreff
Datum
Anwender
Anzeige
AW: VBA > Text keinen Zeilenumbruch
18.01.2009 02:17:16
Roland
Hallo Gopla,
du müsstest das Übel an der Wurzel packen und bereits bei Erstellung der Textdatei sicherstellen, dass keine Steuerzeichen (z.B. Chr 10 oder 13) mit übernommen werden. Per VBA einen neuen Zeilenbeginn zu bestimmen ist mit deiner Routine nicht möglich, die liest eine Textdatei eben zeilenweise ein und teilt jede Zeile nach dem Separator "," in ein Array auf, da ist der Drops schon gelutscht. Um einen konkreten Workaround fabrizieren zu können müsste man schon einen Blick auf die Textdatei und deren gewünschte Aufteilung bekommen.
Gute Nacht aus Berlin von
Roland Hochhäuser
Anzeige
AW: VBA > Text keinen Zeilenumbruch
18.01.2009 02:28:56
Oberschlumpf
HI
Versuch mal mit einer Kopie einer deiner Text-Dateien das hier:

'trag für "DeinPfad:\deineTXTdatei.txt" das Richtige ein
Open "DeinPfad:\deineTXTdatei.txt" For Input As #1
'trag für "DeinPfad:\" das Richtige ein
Open "DeinPfad:\dummy.txt" For Output As #2
Do While Not EOF(1)
Line Input #1, inhalt
inhalt = Replace(inhalt, Chr(10), vbCrLf)
Print #2, inhalt
Loop
Close


Mit diesem Code wird...
1. eine vollständige Zeile aus deiner Txt-Datei eingelesen
2. im nächsten Schritt wird das Steuerzeichen Chr(10) gegen die Konstante vbCrLf (Kombination aus Wagenrücklauf und Zeilenvorschub) ausgetauscht
Aus 1 Zeile mit Chr(10) werden nun 2 Zeilen
3. jetzt wird der neue Inhalt (inkl. "richtigen Zeilenumbruch") in die Datei dummy.txt geshrieben.
4 gehe zu Schritt eins, bis jede Zeile aus DeineDatei.txt eingelesen wurde
Teste deine Prozedur jetzt mal mit der Datei dummy.txt.
Hilfts?
Ciao
Thorsten

Anzeige
AW: VBA > Text keinen Zeilenumbruch
18.01.2009 12:47:00
Gopla
Hallo Thorsten,
hilft sehr, macht wie es soll!
Kurze frage trotzdem:
Kann ich den
'Input #1'
sofort an den
'Line Input #intHandle, strOneLine
arOneLine = Split(strOneLine, ",")'
weitergeben, damit dieser dann ohne den 'dummytext.txt' neueinlesen zumüssten die Zerlegung startet?
(die betreffende .txt Datei ist 15mb+ groß und jede Zeitersparniss ist hilfreich)
Danke für die prima Hilfe!
Gopla
Anzeige
AW: VBA > Text keinen Zeilenumbruch
18.01.2009 13:49:51
Oberschlumpf
HI (heißt du wirklich Gopla?)
Versuch es mal mit diesem Code:

Sub zerlegen()
'deine Datei wird geöffnet
Open "DeinPfad:\deineTXTdatei.txt" For Input As #1
'deine Datei wird bis zum Dateiende eingelesen
Do While Not EOF(1)
'nacheinander werden vollständige Zeilen der Var Inhalt zugewiesen
Line Input #1, inhalt
'das Steuerelement Chr(10) wird durch vbCrLf ersetzt
inhalt = Replace(inhalt, Chr(10), vbCrLf)
'nun müssen erst mal die in Inhalt 2 Zeilen
'voneinander getrennt werden
arInhalt = Split(inhalt, vbCrLf)
'mit einer Schleife werden alle Teile
'von arInhalt verarbeitet
For endergebnis = 0 To UBound(arInhalt)
'arOneLine erhält jetzt nacheinander
'die Inhalte von arInhalt, wobei auch hier
'gleich wieder mit Komma geteilt wird
arOneLine = Split(arInhalt(endergebnis), ",")
'da nun arOneLine ja auch aus mind. 2 Teilen besteht,
'muss wieder mit einer Schleife gearbeitet werden
For durchlauf = 0 To UBound(arOneLine)
'hier dein Code, was mit arOneLine passieren soll
'du musst aber mit arOneLine(durchlauf) arbeiten,
'weil arOneLine ja aus mind. 2 Teilen besteht
'(getrennt durch das Komma), die mit der
'For durchlauf-Schleife abgearbeitet werden
Next
Next
Loop
Close
End Sub


Hilfts?
Ciao
Thorsten

Anzeige
Alles Prima - Danke!
18.01.2009 15:28:00
Gopla
Hallo Thorsten,
so machts Spass, klappt wie es soll und ich hab auch (dank der guten Beschreibung) Grundsätzliches dazu gelernt.
Danke recht herzlich
Gopla
;

Forumthreads zu verwandten Themen

Anzeige
Anzeige
Anzeige
Anzeige

Infobox / Tutorial

Text ohne Zeilenumbrüche in VBA verarbeiten


Schritt-für-Schritt-Anleitung

Um Textdateien in VBA zu verarbeiten und sicherzustellen, dass es keine Zeilenumbrüche im Text gibt, folge diesen Schritten:

  1. Textdatei öffnen: Verwende den Open-Befehl, um die Datei zu öffnen.

    intHandle = FreeFile
    Open "C:\test.txt" For Input As #intHandle
  2. Zeilen einlesen: Nutze Line Input, um die Zeilen der Textdatei einzulesen.

    Line Input #intHandle, strOneLine
  3. Steuerzeichen ersetzen: Ersetze Steuerzeichen wie Chr(10) oder Chr(13) mit vbCrLf, um den Text korrekt zu formatieren.

    strOneLine = Replace(strOneLine, Chr(10), vbCrLf)
  4. Text in Array zerlegen: Teile den Text in ein Array auf, um mit den einzelnen Werten weiterzuarbeiten.

    arOneLine = Split(strOneLine, ",")
  5. Datei schließen: Vergiss nicht, die Datei am Ende zu schließen.

    Close #intHandle

Häufige Fehler und Lösungen

  • Problem: Die Textdatei wird als eine einzige Zeile eingelesen.

    • Lösung: Stelle sicher, dass Du die Steuerzeichen Chr(10) und Chr(13) ersetzt, wie im Schritt oben beschrieben.
  • Problem: Zeilenumbrüche werden nicht korrekt angezeigt.

    • Lösung: Überprüfe, ob die Textdatei in einem Texteditor korrekt formatiert ist. Es könnten unsichtbare Zeichen vorhanden sein.

Alternative Methoden

Wenn die oben genannten Schritte nicht funktionieren, kannst Du auch andere Methoden in Betracht ziehen:

  • Verwendung von TextFieldParser: Falls Du mit .NET arbeiten kannst, ist die TextFieldParser-Klasse eine gute Alternative zur Verarbeitung von CSV- und Textdateien.

  • Excel-Funktionen: Du kannst auch Excel-Funktionen wie TEXTSPLIT verwenden, um Daten direkt aus einer Zelle zu extrahieren, die den Text enthält.


Praktische Beispiele

Hier ist ein Beispielcode, der die oben beschriebenen Schritte implementiert:

Sub VerarbeiteTextdatei()
    Dim intHandle As Integer
    Dim strOneLine As String
    Dim arOneLine() As String

    intHandle = FreeFile
    Open "C:\test.txt" For Input As #intHandle

    Do While Not EOF(intHandle)
        Line Input #intHandle, strOneLine
        strOneLine = Replace(strOneLine, Chr(10), vbCrLf)
        arOneLine = Split(strOneLine, ",")

        ' Hier kannst Du mit arOneLine weiterarbeiten
    Loop

    Close #intHandle
End Sub

Tipps für Profis

  • Debugging: Verwende Debug.Print, um den Wert der Variablen während des Codes zu überprüfen. So kannst Du schnell Probleme identifizieren.

  • Fehlerbehandlung: Implementiere Fehlerbehandlungsroutinen mit On Error GoTo, um unerwartete Fehler während der Ausführung des Codes zu vermeiden.

  • Performance optimieren: Bei großen Textdateien kann es hilfreich sein, den Text in kleineren Teilen zu verarbeiten, um die Leistung zu verbessern.


FAQ: Häufige Fragen

1. Frage Wie kann ich sicherstellen, dass meine VBA-Routine auch bei großen Textdateien schnell arbeitet?

Antwort Verarbeite die Textdatei in kleineren Teilen und vermeide das Speichern unnötiger Variablen im Speicher. Auch das Verwenden von vbCrLf anstelle von separaten Chr(10) und Chr(13) kann helfen.

2. Frage Was mache ich, wenn ich immer noch Probleme mit Zeilenumbrüchen habe?

Antwort Überprüfe die Ursprungsdatei in einem Texteditor auf unsichtbare Zeichen oder benutze alternative Methoden wie das TextFieldParser-Objekt in .NET für eine robustere Lösung.

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