VBA Ordner und Unterordner durchsuchen und Datei-Inhalt ausgeben

  • Excel

    VBA Ordner und Unterordner durchsuchen und Datei-Inhalt ausgeben

    Hallo miteinander,

    Habe Frage: wie kann ich mit einer Excel Datei einen Ordner und dessen Unterordner auslesen.
    Da ich extrem viel Ahnung habe von VBA (Und davon echt wenig) frage ich hier erst mal an.

    Das Macro soll in der Lage sein, Tabellenblatt 1 und zwei zu durchsuchen, und deren inhalte auszugeben.
    Die Dateien haben immer an derselben Stelle ein Datum C4 stehen.

    Es kann sein, dass einige Dateien mehr als zwei Tabellenblätter haben.
    Das Makro muss nicht unbedingt die Datei öffnen, sondern nur auslesen. Bzw. kann es sein, dass ich im Hintergrund mit einer der Dateien arbeite, dementsprechend sollte das Makro in der Lage sein, diese dennoch auszulesen.

    Das Datum und die Inhalte von B6:B55;C6:C55;D6: D55;E6:E55 sofern werte sind, soll die Datei nach Datum gelistet diese in eine Tabelle listen. Diese Tabelle sollte fortlaufend sein. Das Datum sollte vor jede Zeile wiederholt werden, in der es Werte aus dem Tabellenblatt gibt. werden, um eine Verwechslungsgefahr zu vermeiden.

    Die Namen der Tabellenblätter sind unbekannt.

    Könnt ihr mir helfen?

    Danke und Gruß

    Ggf. kann man mit dem was Mono mal gepostet hat arbeiten bzw. ggf kann auch er mir mal helfen.





    Mono schrieb:

    Hi und Willkommen

    Visual Basic-Quellcode

    1. Option Explicit
    2. Sub main()
    3. LoopThroughFolder "C:\YourFolder", Split("xls,xlsx,xlsm", ",") 'such in C:\YourFolder nach xls, xlsx oder xlsm
    4. End Sub
    5. Public Sub LoopThroughFolder(path As String, Filter As Variant)
    6. Dim fso, oFolder, oSubfolder, oFile, queue As Collection
    7. On Error Resume Next 'Falls Permission denied nächsten Folder/File nehmen (quick n dirty)
    8. Set fso = CreateObject("Scripting.FileSystemObject")
    9. Set queue = New Collection
    10. queue.Add fso.GetFolder(path)
    11. Do While queue.Count > 0
    12. Set oFolder = queue(1)
    13. queue.Remove 1
    14. For Each oSubfolder In oFolder.SubFolders
    15. If oSubfolder <> vbEmpty Then queue.Add oSubfolder
    16. Next
    17. For Each oFile In oFolder.Files
    18. If oFile <> vbEmpty Then
    19. If IsInArray(fso.GetExtensionName(oFile.path), Filter) Then
    20. Debug.Print oFile.path & " ist eine Exceldatei" 'mach was mit der Datei
    21. End If
    22. End If
    23. Next
    24. Loop
    25. End Sub
    26. Function IsInArray(str As String, arr As Variant) As Boolean
    27. IsInArray = (UBound(Filter(arr, str)) > -1)
    28. End Function



    Wie du dann mit den Exceldateien weiter arbeitest musst du wissen ;)