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

Forumthread: txt Dateien importieren mit Zeilenumbruch

txt Dateien importieren mit Zeilenumbruch
Daniel
Hallo und schönen guten Tag.
Ich habe ein Makro welches soweit funktioniert.
Ich möchte verschiedene gleichartige csv Dateien in Excel importieren.
Hierzu folgendes Makro:
Sub Rename_Files()
'(C) Ramses
'Liest alle txt-Dateien in einem Verzeichnis ein
Dim Datei As String, freeRow As Long
Dim Qe As Integer
Dim PFAD As String
PFAD = "C:\Test\" 'ACHTUNG: Bachslash am Schluss
Datei = Dir(PFAD & "*.txt")
Qe = MsgBox("Zum Import muss die aktuelle Tabelle leer sein," & vbCrLf & _
"bzw. alle Daten der aktuellen Tabelle: "" " & ActiveSheet.Name & " "" werden gelöscht", _
vbYesNo + vbCritical, "CSV-Import starten ?")
If Qe = vbNo Then
MsgBox "CSV-Import abgebrochen"
Exit Sub
Else
Cells.Clear
End If
Do While Datei  ""
freeRow = Cells(Rows.Count, 1).End(xlUp).Row + 1
With ActiveSheet.QueryTables.Add(Connection:="TEXT;" & PFAD & Datei, Destination:=Range("A"  _
& freeRow))
.Name = Datei
.FieldNames = True
.RowNumbers = False
.FillAdjacentFormulas = False
.PreserveFormatting = True
.RefreshOnFileOpen = False
.RefreshStyle = xlInsertDeleteCells
.SavePassword = False
.SaveData = True
.AdjustColumnWidth = True
.RefreshPeriod = 0
.TextFilePromptOnRefresh = False
.TextFilePlatform = 850
.TextFileStartRow = 1
.TextFileParseType = xlDelimited
.TextFileTextQualifier = xlTextQualifierDoubleQuote
.TextFileConsecutiveDelimiter = False
.TextFileTabDelimiter = False
.TextFileSemicolonDelimiter = True
.TextFileCommaDelimiter = False
.TextFileSpaceDelimiter = False
.TextFileColumnDataTypes = Array(1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1)
.TextFileTrailingMinusNumbers = True
.Refresh BackgroundQuery:=False
End With
Datei = Dir()
Loop
End Sub
Nun möchte ich das Makro erweitern, nur weiß ich nicht, wie ich dies machen kann.
Der Gedanke ist, das die txt Dateien nicht einfach nur Zeile für Zeile importiert werden, sondern beim Import schon auf mehrere Zeilen aufgeteilt werden.
Nicht Spalten, wirklich Zeilen.
Für einen Zeilenumbruch kann die Zeichenkette UNH verwendet werden.
Ergebnis z.B.
Textdatei 1 Zeile 1 bis 5
Textdatei 2 Zeile 6 vis 8
...
Schön wäre, wenn die Trennung vor dem UNH erfolgt.
Wie geht soetwas, bzw. ist dann das obenstehende Makro verwendbar?
Vielen Dank,
Daniel.
Anzeige
AW: txt Dateien importieren mit Zeilenumbruch
19.01.2011 15:38:59
Tino
Hallo,
könnte so funktionieren.
Sub Makro1()
Dim Datei As String, freeRow As Long
Dim Qe As Integer, F As Integer
Dim PFAD As String, sInhalt As String
Dim varInhalt

PFAD = "C:\Test\" 'ACHTUNG: Bachslash am Schluss 
Datei = Dir(PFAD & "*.txt")

Qe = MsgBox("Zum Import muss die aktuelle Tabelle leer sein," & vbCrLf & _
    "bzw. alle Daten der aktuellen Tabelle: "" " & ActiveSheet.Name & " "" werden gelöscht", _
    vbYesNo + vbCritical, "CSV-Import starten ?")

If Qe = vbNo Then
    MsgBox "CSV-Import abgebrochen"
    Exit Sub
Else
    Cells.Clear
End If

Do While Datei <> ""
    freeRow = Cells(Rows.Count, 1).End(xlUp).Row + 1
    
    F = FreeFile
    Open PFAD & Datei For Binary As #F
    sInhalt = Space$(LOF(F))
    Get #F, , sInhalt
    Close

    sInhalt = Replace(sInhalt, vbCrLf, "") 'Zeilenumbrüche entfernen 
    varInhalt = Split(sInhalt, "UNH") 'Text in Array Slitten 
    varInhalt = Application.Transpose(varInhalt) 'Array drehen 
    
    Cells(freeRow, 1).Resize(Ubound(varInhalt), 1) = varInhalt 'in Zelle schreiben 
    
    Datei = Dir()
Loop

End Sub
Gruß Tino
Anzeige
AW: txt Dateien importieren mit Zeilenumbruch
19.01.2011 15:59:48
Daniel
Hey Tino,
leider bekomme ich jetzt eine Fehlermeldung und der import bricht ab.
Laufzeitfehler '-2147417848(80010108)'
Automatisierungsfehler
Vielen Dank aber für die schnelle Antwort.
Daniel.
AW: txt Dateien importieren mit Zeilenumbruch
19.01.2011 16:13:36
Tino
Hallo,
bei mir funktioniert es, weiß nicht was bei dir nicht passt.
Hier ein Beispiel
https://www.herber.de/bbs/user/73152.zip
Gruß Tino
Anzeige
AW: txt Dateien importieren mit Zeilenumbruch
19.01.2011 16:37:46
Daniel
Hm,
hallo Tino, leider will es bei mir nicht gehen, selber Fehler
Daher habe ich 2 Dateien mal mit angehängt, so sehen sie mehr oder minder aus.
https://www.herber.de/bbs/user/73153.txt
https://www.herber.de/bbs/user/73154.txt
In den importierten Zeilen benötige ich alle Zeichen der Ursprungsdatei.
Danke.
Daniel
Anzeige
bei mir gehts, habe aber xl2007? ...
19.01.2011 16:44:37
Tino
Hallo,
vielleicht kann ein anderer mal testen mit xl2003,
ich habe z.Z. nur xl2007 zur Verfügung.
Kann es mir fast nicht vorstellen, dass die Version den Fehler bringt.
Gruß Tino
AW: txt Dateien importieren mit Zeilenumbruch
19.01.2011 16:39:15
Daniel
ach so .. wenn ich Deine Dateien versuche, dann geht es.
Nur mit hinzufügen meiner Dateien in das Verzeichnis, kommt der vorher genannte Fehler.
Anzeige
AW: txt Dateien importieren mit Zeilenumbruch
19.01.2011 17:13:16
Tino
Hallo,
liegt wohl an dem Text, der lässt sich in dieser Version in einem Array nicht drehen.
Versuch wir es einfach und drehen dies in einer Schleife.
Sub Makro1()
Dim Datei As String, freeRow As Long, nCount As Long
Dim Qe As Integer, F As Integer
Dim PFAD As String, sInhalt As String
Dim varInhalt, NewArray()

PFAD = IIf(Right$(ThisWorkbook.Path, 1) = "\", ThisWorkbook.Path, ThisWorkbook.Path & "\") 'ACHTUNG: Bachslash am Schluss 
PFAD = PFAD & "TextFiles\"
Datei = Dir(PFAD & "*.txt")

Qe = MsgBox("Zum Import muss die aktuelle Tabelle leer sein," & vbCrLf & _
    "bzw. alle Daten der aktuellen Tabelle: "" " & ActiveSheet.Name & " "" werden gelöscht", _
    vbYesNo + vbCritical, "CSV-Import starten ?")

If Qe = vbNo Then
    MsgBox "CSV-Import abgebrochen"
    Exit Sub
Else
    Cells.Clear
End If

Do While Datei <> ""
    freeRow = Cells(Rows.Count, 1).End(xlUp).Row + 1
    
    F = FreeFile
    Open PFAD & Datei For Binary As #F
    sInhalt = Space$(LOF(F))
    Get #F, , sInhalt
    Close

    sInhalt = Replace(sInhalt, vbCrLf, "") 'Zeilenumbrüche entfernen 
    varInhalt = Split(sInhalt, "UNH") 'Text in Array Slitten 
    Redim Preserve NewArray(1 To Ubound(varInhalt) + 1, 1 To 1)
    
    For nCount = Lbound(varInhalt) To Ubound(varInhalt)
        NewArray(nCount + 1, 1) = varInhalt(nCount)
    Next nCount

    
    Cells(freeRow, 1).Resize(Ubound(NewArray), 1) = NewArray 'in Zelle schreiben 
    Erase NewArray
    Datei = Dir()
Loop

End Sub
Gruß Tino
Anzeige

Forumthreads zu verwandten Themen

Anzeige
Anzeige
Anzeige
Anzeige

Infobox / Tutorial

txt Dateien importieren mit Zeilenumbruch in Excel


Schritt-für-Schritt-Anleitung

Um txt-Dateien in Excel zu importieren und dabei Zeilenumbrüche korrekt zu handhaben, kannst du ein VBA-Makro verwenden. Hier ist eine Schritt-für-Schritt-Anleitung:

  1. Öffne Excel und drücke ALT + F11, um den VBA-Editor zu starten.
  2. Füge ein neues Modul hinzu: Rechtsklick auf "VBAProject (deinWorkbookName)" > Einfügen > Modul.
  3. Kopiere den folgenden Code in das Modul:
Sub txtImportMitZeilenumbruch()
    Dim Datei As String, freeRow As Long, nCount As Long
    Dim Qe As Integer, F As Integer
    Dim PFAD As String, sInhalt As String
    Dim varInhalt, NewArray()

    PFAD = "C:\Test\" ' ACHTUNG: Bachslash am Schluss
    Datei = Dir(PFAD & "*.txt")

    Qe = MsgBox("Zum Import muss die aktuelle Tabelle leer sein," & vbCrLf & _
                 "bzw. alle Daten der aktuellen Tabelle: """ & ActiveSheet.Name & """ werden gelöscht", _
                 vbYesNo + vbCritical, "TXT-Import starten?")

    If Qe = vbNo Then
        MsgBox "TXT-Import abgebrochen"
        Exit Sub
    Else
        Cells.Clear
    End If

    Do While Datei <> ""
        freeRow = Cells(Rows.Count, 1).End(xlUp).Row + 1

        F = FreeFile
        Open PFAD & Datei For Binary As #F
        sInhalt = Space$(LOF(F))
        Get #F, , sInhalt
        Close

        sInhalt = Replace(sInhalt, vbCrLf, "") ' Zeilenumbrüche entfernen
        varInhalt = Split(sInhalt, "UNH") ' Text in Array splitten
        ReDim Preserve NewArray(1 To UBound(varInhalt) + 1, 1 To 1)

        For nCount = LBound(varInhalt) To UBound(varInhalt)
            NewArray(nCount + 1, 1) = varInhalt(nCount)
        Next nCount

        Cells(freeRow, 1).Resize(UBound(NewArray), 1) = NewArray ' in Zelle schreiben
        Erase NewArray
        Datei = Dir()
    Loop
End Sub
  1. Passe den Pfad (PFAD) an, wo sich deine txt-Dateien befinden.
  2. Führe das Makro aus, indem du im VBA-Editor auf F5 drückst oder zurück zu Excel gehst und das Makro über Entwicklertools > Makros auswählst.

Häufige Fehler und Lösungen

  • Laufzeitfehler '-2147417848(80010108)': Dieser Fehler tritt häufig aufgrund von Komplikationen mit dem Array auf. Stelle sicher, dass der Inhalt deiner txt-Dateien nicht zu groß ist oder unerwartete Zeichen enthält.

  • Bachslash-Problem: Achte darauf, dass der Pfad zum Verzeichnis mit einem Bachslash (\) endet, da dies häufig zu Importfehlern führt.


Alternative Methoden

Falls du nicht mit VBA arbeiten möchtest, kannst du auch die Datenimport-Funktion in Excel nutzen:

  1. Gehe zu Daten > Aus Text/CSV.
  2. Wähle die txt-Datei aus und klicke auf Importieren.
  3. Wähle die Trennzeichen und stelle sicher, dass die Option für Zeilenumbrüche korrekt konfiguriert ist.

Diese Methode ist jedoch weniger flexibel und bietet nicht die gleiche Möglichkeit, wie dein VBA-Skript.


Praktische Beispiele

Angenommen, du hast eine txt-Datei mit folgendem Inhalt:

Text1UNHText2UNHText3

Nach dem Import mit dem Makro wird der Inhalt in Excel wie folgt aussehen:

Spalte A
Text1
Text2
Text3

Dies zeigt, wie das Makro txt-Dateien mit UNH als Zeilenumbruch in Excel importiert.


Tipps für Profis

  • Verwende Application.ScreenUpdating = False zu Beginn deines Makros, um die Bildschirmaktualisierung während des Imports zu deaktivieren. Dies kann die Performance verbessern.

  • Füge Fehlerbehandlung hinzu, um sicherzustellen, dass dein Makro auch bei unerwarteten Fehlern stabil bleibt. Zum Beispiel:

On Error GoTo FehlerHandler
  • Teste dein Makro mit verschiedenen txt-Dateien, um sicherzustellen, dass es robust genug ist, um verschiedene Formate zu verarbeiten.

FAQ: Häufige Fragen

1. Wie kann ich das Makro anpassen? Du kannst den Pfad (PFAD) und das Trennzeichen ("UNH") im Code ändern, um an deine spezifischen Anforderungen anzupassen.

2. Funktioniert das auch mit CSV-Dateien? Ja, du kannst das Makro so anpassen, dass es auch CSV-Dateien importiert. Achte darauf, die entsprechenden Trennzeichen zu verwenden.

3. Gibt es eine Limitierung bei der Anzahl der Zeilen oder Zeichen? Ja, Excel hat eine maximale Anzahl an Zeilen (1.048.576 in Excel 2007 und höher). Stelle sicher, dass deine txt-Datei diese Grenze nicht überschreitet.

4. Welche Excel-Version benötige ich? Das Makro sollte in Excel 2003 und höher funktionieren. Bitte teste es in deiner Version, um sicherzustellen, dass es ordnungsgemäß funktioniert.

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige