Mehrere Textdateien aus einem Ordner automatisch einlesen

  • Excel

Es gibt 2 Antworten in diesem Thema. Der letzte Beitrag () ist von peterfido.

    Mehrere Textdateien aus einem Ordner automatisch einlesen

    Hey Freunde! :)

    Ich habe in den letzten Wochen mal angefangen VBA zu programmieren und bin richtig begeistert!
    Nun habe ich jedoch ein Problem und komme gerade nicht weiter.

    Ziel: In einem Ordner sind mehrere Textdateien, die Anzahl kann unterschiedlich sein. Ich will nun alle Textdateien automatisch nacheinander einlesen und auf wichtige Elemente durchsuchen.
    Das Auslesen einer Textdatei und filtern nach den Elementen habe ich bereits realisiert. Nun will ich das Programm aber so erweitern, dass wirklich alle vorhandenen Textdateien im Ordner automatisch nach der Reihe gelesen werden.

    Ich stehe momentan ziemlich aufm Schlauch und vielleicht könnt ihr ja mal etwas weiterhelfen :)

    Mein bisheriger Code, der eine Textdatei einlesen kann und nach den angegeben Begriffe filter werde ich hier unten anheften. ;)

    Vielen Danlk Leute! Ich freue mich auf Antworten und Hinweise :)

    Visual Basic-Quellcode

    1. Sub Text_dateien_einlesen()
    2. Dim ws As Excel.Worksheet
    3. Const szSuch = "SELFDIAGNOSIS.CODE" ' Suche nach Hex-Code
    4. Const szSuch2 = "SELFDIAGNOSIS.VEHICLE_ID" 'Suche nach Faherzeugnummer
    5. Const szSuch3 = "SELFDIAGNOSIS.STATE" 'Status Diagnose
    6. Const szSuch4 = "irgendwas"
    7. Dim i As Integer ' Zählvariable für Hex-Code
    8. Dim j As Integer 'Zählvariable für Fahrzeugnummer
    9. Dim x As Integer 'Zählvariable für Status
    10. Set objFSO = CreateObject("Scripting.FileSystemObject")
    11. Set objSourceFile = objFSO.OpenTextFile("D:\Users\name\Documents\03_Visual_Basic_Programmierung\logs.txt", 1) ' Quelldatei öffnen
    12. Set ws = ActiveWorkbook.Sheets(1) ' Zieldatei anlegen / überschreiben
    13. i = 1
    14. j = 1
    15. x = 1
    16. Do Until objSourceFile.AtEndOfStream ' Gesammtes TextDok durchgehen
    17. szNextLine = objSourceFile.Readline ' Zeile aus Quelldatei einlesen
    18. If InStr(szNextLine, szSuch) Then
    19. ws.Cells(i, 1).Value = szNextLine 'Wert in Zelle schreiben
    20. i = i + 1 'Zähler für nächste Zeile erhöhen ' Zeile in Zieldatei schreiben
    21. ElseIf InStr(szNextLine, szSuch2) Then
    22. ws.Cells(j, 4).Value = szNextLine 'Wert in Zelle schreiben
    23. j = j + 1 'Zähler für nächste Zeile erhöhen ' Zeile in Zieldatei schreiben
    24. ElseIf InStr(szNextLine, szSuch3) Then
    25. ws.Cells(x, 7).Value = szNextLine 'Wert in Zelle schreiben
    26. x = x + 1 'Zähler für nächste Zeile erhöhen ' Zeile in Zieldatei schreiben
    27. End If
    28. Loop
    29. End Sub
    Hi und Willkommen.

    Zum Durchsuchen benötigst du ja alle Dateien mit der Endung .TXT

    Die performante Variante (aber nicht so schön lesbar wäre):

    Visual Basic-Quellcode

    1. Const strPattern As String = "*.TXT"
    2. Dim strFolder As String
    3. strFolder = "D:\"
    4. Dim strFile As String
    5. strFile = Dir(strFolder & strPattern, vbNormal)
    6. Do While Len(strFile) > 0
    7. Debug.Print strFolder & strFile 'Datei name
    8. 'Hier mach was mit der Datei
    9. strFile = Dir
    10. Loop


    Es geht aber auch mit dem von dir schon verwendetem FileSystemobject

    Visual Basic-Quellcode

    1. Dim strFolder As String
    2. strFolder = "D:\"
    3. With objFSO.GetFolder(strFolder )
    4. For Each fil In .Files
    5. If LCase(Right(fil.Name, 4)) = ".txt" Then
    6. 'Mach was mit der Datei
    7. End If
    8. Next


    Dies ist allerdings alles ohne Einbeziehung von Unterordnern

    LG
    Das ist meine Signatur und sie wird wunderbar sein!
    Hallo,

    mit Unterordner ist das mein Vorschlag:

    Visual Basic-Quellcode

    1. Option Explicit
    2. Private Sub Test()
    3. Textdateien_Suchen "f:\", True
    4. End Sub
    5. Private Sub Textdateien_Suchen(ByVal sPfad As String, Optional ByVal Unterordner As Boolean = False)
    6. Dim oFSO As Object
    7. Dim oFLD As Folder
    8. Dim Ordner As Folder
    9. Dim Datei As File
    10. On Error Resume Next 'Fehlende Zugriffsrechte ignorieren
    11. Set oFSO = CreateObject("Scripting.FileSystemObject")
    12. If oFSO.folderexists(sPfad) Then
    13. Set oFLD = oFSO.GetFolder(sPfad)
    14. If Unterordner Then
    15. For Each Ordner In oFLD.SubFolders
    16. Textdateien_Suchen Ordner.Path, True
    17. Next
    18. End If
    19. For Each Datei In oFLD.Files
    20. If LCase(oFSO.GetExtensionName(Datei.Path)) = "txt" Then
    21. Textdatei_einlesen Datei.Path
    22. End If
    23. Next
    24. End If
    25. Set oFSO = Nothing
    26. On Error GoTo 0
    27. End Sub
    28. Private Sub Textdatei_einlesen(ByVal sDateiname As String)
    29. Debug.Print sDateiname
    30. DoEvents
    31. End Sub

    Gruß
    Peterfido

    Keine Unterstützung per PN!