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

Forumthread: Makro Txt Datei einlesen

Makro Txt Datei einlesen
14.09.2016 11:20:13
Dominik
Hallo zusammen,
ich möchte ein relativ große Txt Datei einlesen. Das einlesen der kompletten Datei bekomme ich schon hin, leider will ich nur einen Bestimmten Teil einlesen.
Irgendwo in der Datei kommt folgendes Wort vor: "COMPU_TAB_REF", ab hier sollen die nachfolgenden Zeilen eingelesen werden. Leider sollen nicht alle Zeilen die nach COMPU_TAB_REF kommen eingelesen, sondern nur die mit "DFC_" beginnen. Kann mir da vielleicht jemand helfen? Das wäre super!
Grüße
Dominik
Anbei mal das bereits erstellte Makro
Sub Datei_importieren()
Dim Datei As String, Text As String
Dim Zeile As Long
On Error GoTo Fehler
'Quelldatei festlegen
Datei = ThisWorkbook.Path & "\C1636QV50_0309165.a2l"
Open Datei For Input As #1         ' Quelldatei öffnen.
Zeile = 1
Do While Not EOF(1)           ' Schleife bis Dateiende
Line Input #1, Text      ' Text lesen
If Text = "COMPU_TAB_REF DFCDSQ_Verb" Then
ActiveSheet.Cells(Zeile, 1) = Text
Zeile = Zeile + 1
End If
Loop
Close #1   'Quelldatei schließen
Exit Sub
End Sub

Anzeige

4
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Makro Txt Datei einlesen
14.09.2016 11:36:40
UweD
Hallo
Sub Datei_importieren()

    Dim Datei As String, Text As String
    Dim Zeile As Long, Abjetzt As Boolean
    
    On Error GoTo Fehler
    ActiveSheet.Columns(1).ClearContents
    
    'Quelldatei festlegen 
    Datei = ThisWorkbook.Path & "\C1636QV50_0309165.a2l"
    
    Close #1   'Quelldatei vorsichtshalber schließen 
    Open Datei For Input As #1         ' Quelldatei öffnen. 
    Zeile = 1
    
    Do While Not EOF(1)           ' Schleife bis Dateiende 
        Line Input #1, Text      ' Text lesen 
        If Text = "COMPU_TAB_REF DFCDSQ_Verb" Then Abjetzt = True
        If Abjetzt And Left(Text, 4) = "DFC_" Then
            ActiveSheet.Cells(Zeile, 1) = Text
            Zeile = Zeile + 1
        End If
    Loop
    
    Close #1   'Quelldatei schließen 
    
    Err.Clear
Fehler:
    If Err.Number <> 0 Then MsgBox "Fehler: " & _
        Err.Number & vbLf & Err.Description: Err.Clear
End Sub

Gruß UweD
Anzeige
AW: Makro Txt Datei einlesen
14.09.2016 11:53:57
Daniel
Hi
probiers mal so:
Sub Datei_importieren()
Dim Datei As String, Text As String
Dim Zeile As Long
Dim EinLesen as boolean
On Error GoTo Fehler
'Quelldatei festlegen
Datei = ThisWorkbook.Path & "\C1636QV50_0309165.a2l"
Open Datei For Input As #1         ' Quelldatei öffnen.
Zeile = 1
Do While Not EOF(1)           ' Schleife bis Dateiende
Line Input #1, Text      ' Text lesen
If Text = "COMPU_TAB_REF DFCDSQ_Verb" Then Einlesen = True
If Einlesen then
If Text Like "DFC_*" then
ActiveSheet.Cells(Zeile, 1) = Text
Zeile = Zeile + 1
End If
End If
Loop
Close #1   'Quelldatei schließen
Exit Sub
End Sub
gruß Daniel
Anzeige
schneller per Array
14.09.2016 12:32:01
Rudi
Hallo,
benutze niemals VBA-Schlüsselwörter als Variablenbezeichnung. Text ist eine Eigenschaft.
Sub Datei_importieren()
Dim Datei As String, sText As String, vText
Dim EinLesen As Boolean
'Quelldatei festlegen
Datei = ThisWorkbook.Path & "\C1636QV50_0309165.a2l"
If Dir(Datei, vbNormal)  "" Then
Open Datei For Input As #1         ' Quelldatei öffnen.
Do While Not EOF(1)           ' Schleife bis Dateiende
Line Input #1, sText      ' Text lesen
If sText = "COMPU_TAB_REF DFCDSQ_Verb" Then EinLesen = True
If EinLesen Then
If sText Like "DFC_*" Then
vText = vText & vbCrLf & sText
End If
End If
Loop
Close #1   'Quelldatei schließen
vText = Split(Mid(vText, 2), vbCrLf)
Cells(1, 1).Resize(UBound(vText) + 1) = vText
End If
End Sub

Anzeige
AW: Makro Txt Datei einlesen
14.09.2016 13:35:30
Dominik
Ihr seid die Besten, vielen Dank für die Hilfe!! Jetzt läuft es.
Grüße
Dominik

Forumthreads zu verwandten Themen

Anzeige
Anzeige
Anzeige
Anzeige
Anzeige

Infobox / Tutorial

Makro zum Einlesen von Textdateien in Excel


Schritt-für-Schritt-Anleitung

Um eine Textdatei in Excel mit VBA zu lesen, kannst Du das folgende Makro verwenden. In diesem Beispiel wird eine .a2l Datei eingelesen und nur die Zeilen, die mit "DFC_" beginnen, nach dem Wort "COMPU_TAB_REF" in Excel importiert.

  1. Öffne Excel und drücke ALT + F11, um den VBA-Editor zu öffnen.
  2. Füge ein neues Modul hinzu, indem Du mit der rechten Maustaste auf "VBAProject (DeineDatei)" klickst und "Einfügen" > "Modul" auswählst.
  3. Kopiere den folgenden VBA-Code in das Modul:
Sub Datei_importieren()
    Dim Datei As String, sText As String
    Dim Zeile As Long
    Dim EinLesen As Boolean
    On Error GoTo Fehler
    'Quelldatei festlegen
    Datei = ThisWorkbook.Path & "\C1636QV50_0309165.a2l"
    Open Datei For Input As #1         ' Quelldatei öffnen.
    Zeile = 1
    Do While Not EOF(1)           ' Schleife bis Dateiende
        Line Input #1, sText      ' Text lesen
        If sText = "COMPU_TAB_REF DFCDSQ_Verb" Then EinLesen = True
        If EinLesen Then
            If sText Like "DFC_*" Then
                ActiveSheet.Cells(Zeile, 1) = sText
                Zeile = Zeile + 1
            End If
        End If
    Loop
    Close #1   'Quelldatei schließen
    Exit Sub
Fehler:
    MsgBox "Fehler: " & Err.Description
End Sub
  1. Passe den Dateipfad an, falls nötig.
  2. Führe das Makro aus, um die Daten aus der Textdatei in Excel zu importieren.

Häufige Fehler und Lösungen

  • Fehler beim Öffnen der Datei: Überprüfe, ob der Dateipfad korrekt ist und die Datei existiert.
  • Keine Daten importiert: Stelle sicher, dass die Bedingungen im Code korrekt sind (z.B. das Vorhandensein des Begriffs "COMPU_TABREF" und das passende Präfix "DFC").
  • VBA-Fehler: Achte darauf, keine VBA-Schlüsselwörter als Variablenbezeichnungen zu verwenden, z.B. "Text".

Alternative Methoden

Wenn Du eine alternative Methode zum Einlesen von Textdateien in Excel suchst, könntest Du die Open-Anweisung in Kombination mit einem Array verwenden. So kannst Du die Daten effizienter verarbeiten:

Sub Datei_importieren_Array()
    Dim Datei As String, sText As String
    Dim vText As Variant
    Dim Zeile As Long
    Dim EinLesen As Boolean
    Datei = ThisWorkbook.Path & "\C1636QV50_0309165.a2l"
    If Dir(Datei, vbNormal) <> "" Then
        Open Datei For Input As #1
        Do While Not EOF(1)
            Line Input #1, sText
            If sText = "COMPU_TAB_REF DFCDSQ_Verb" Then EinLesen = True
            If EinLesen And sText Like "DFC_*" Then
                vText = vText & vbCrLf & sText
            End If
        Loop
        Close #1
        vText = Split(Mid(vText, 2), vbCrLf)
        Cells(1, 1).Resize(UBound(vText) + 1) = vText
    End If
End Sub

Praktische Beispiele

Hier sind einige Beispiele, wie man mit Excel VBA eine Textdatei zeilenweise einlesen kann:

  1. Daten aus einer .txt Datei lesen:
Sub Txt_Datei_einlesen()
    ' Implementierung ähnlich wie oben, jedoch für .txt Dateien
End Sub
  1. Daten aus einer .csv Datei importieren:
Sub Csv_Datei_importieren()
    ' CSV-Spezifische Logik hier implementieren
End Sub

Tipps für Profis

  • Nutze Option Explicit am Anfang Deines Moduls, um sicherzustellen, dass alle Variablen deklariert werden.
  • Arbeite mit Fehlerbehandlungsroutinen, um unerwartete Fehler abzufangen und informiere den Benutzer über Probleme.
  • Verwende With-Anweisungen, um den Code lesbarer zu machen, wenn Du häufig auf dasselbe Objekt zugreifst.

FAQ: Häufige Fragen

1. Wie kann ich eine Textdatei mit einem anderen Dateiformat einlesen? Du kannst das gleiche Prinzip anwenden, musst jedoch sicherstellen, dass der Dateipfad und die Logik zum Einlesen der Daten angepasst werden.

2. Was mache ich, wenn ich eine große Datei habe? Für große Dateien solltest Du sicherstellen, dass Du den Speicher effizient verwaltest und vielleicht mit Arrays arbeitest, um die Leistung zu verbessern.

3. Welche Excel-Version benötige ich für VBA? VBA ist in den meisten Excel-Versionen verfügbar, einschließlich Excel 2010, 2013, 2016, 2019 und 365.

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige