Pfad als Variable in eine Array und und prüfen ob die Ordner leer sind

  • Sonstige

Es gibt 6 Antworten in diesem Thema. Der letzte Beitrag () ist von Poeci.

    Pfad als Variable in eine Array und und prüfen ob die Ordner leer sind

    Servus,

    Ich möchte gerne mehrere verschiedene Pfade angeben können und damit prüfen, ob die Ordner leer sind. (keine Dateien)
    Ich habe das Problem ich bekomme einen Runtime Error 13 - Type mismatch.

    An dieser Stelle. Meine Vermutung ist das ich eine Vermischung mit Objekt und String gemacht habe.

    Quellcode

    1. Set oSourceFolder = oFSO.GetFolder(Pfade)


    Ich weiß aber nicht wo ich korrigieren muss und ob das was ich da geschrieben überhaupt so funktionieren kann.
    Ich habe schon mit den Deklarationen hin und her probiert und mit dem Debugger ausprobiert um so auf den Fehler
    zu kommen aber ich bleibe immer an dem Error hängen.

    Quellcode

    1. Public Sub Ordnerleer()
    2. Dim oFSO As Object
    3. Dim Var1 As String
    4. Dim Var2 As String
    5. Dim Var3 As String
    6. Dim Var4 As String
    7. Dim Pfade As Variant
    8. Dim z As Integer
    9. Dim oSourceFolder As Object
    10. Dim Pfad
    11. Var1 = "D:\"
    12. Var2 = "E:\"
    13. Var3 = "E:\Test\Test"
    14. Var4 = "\\Daten\"
    15. Pfade = Array(Var1, Var2, Var3, Var4)
    16. Set oFSO = CreateObject("Scripting.FileSystemObject")
    17. Set oSourceFolder = oFSO.GetFolder(Pfade)
    18. For Each Pfad In Pfade
    19. 'Wenn keine Dateien vorhanden
    20. z = oSourceFolder.Files.Count
    21. If z = 0 Then
    22. MsgBox "Keine Dateien"
    23. End If
    24. Next
    25. Set oFSO = Nothing
    26. End Sub


    Kann mir einer von Euch auf Bitte helfen und sagen was falsch ist? Ich hoffe nicht alles.

    LG Poeci
    Hallo,
    GetFolder() erwartet einen String und kein Array. D.h. bei dir ist das an der falschen Stelle. Siehe unten.

    Visual Basic-Quellcode

    1. Pfade = Array(Var1, Var2, Var3, Var4)
    2. Set oFSO = CreateObject("Scripting.FileSystemObject")
    3. For Each Pfad In Pfade
    4. 'Wenn keine Dateien vorhanden
    5. Set oSourceFolder = oFSO.GetFolder(Pfad) 'Das muss in die Schleife
    6. If oSourceFolder.Files.Count = 0 Then
    7. MsgBox "Keine Dateien"
    Hallo ISliceUrPanties,

    Vielen Dank für deine Antwort. Funktioniert bestens.

    Brauchen Pfad und Pfade keine Deklarationen?
    Wenn ja welche wären das weil wenn ich folgendes Schreibe:

    Quellcode

    1. Dim Pfad As String
    2. Dim Pfade As String



    bekomme ich einen Fehler

    oder reicht als Deklaration folgendes aus:

    Quellcode

    1. Dim Pfad
    2. Dim Pfade


    Vielen Dank für deine tolle Hilfe.

    LG Poeci

    Poeci schrieb:

    Dim Pfad As String
    Dim Pfade As String

    Visual Basic-Quellcode

    1. Dim Pfade() As String
    2. Dim Pfad As Variant

    Pfade ist ein Array.
    Pfad ist de facto ein String, aber du verwendest es als For Each Schleifenvariable und das erfordert ein Variant.
    --
    If Not Program.isWorking Then Code.Debug Else Code.DoNotTouch
    --
    Hallo petaod,

    Vielen Dank für deine Antwort.
    Das mit den Variant habe ich auch rausgefunden aber auf die Klammer bin ich nicht gekommen.

    Jetzt hat sich beim Debuggen noch etwas ergeben.
    Diese Zeile:

    Quellcode

    1. Set oSourceFolder = oFSO.GetFolder(Pfad) 'Das muss in die Schleife


    kann einen Fehler 76 auslösen wenn der Ordner nicht gefunden wird.
    Daraufhin habe ich folgendes zum debuggen eingebaut.

    Quellcode

    1. On Error Resume Next
    2. For Each Path In Pathes
    3. Set oSourceFolder = oFSO.GetFolder(Path)
    4. If Err.Number > 0 Then
    5. Debug.Print Err.Description
    6. Debug.Print oSourceFolder
    7. Err.Clear
    8. End If
    9. If oSourceFolder.Files.Count = 0 Then 'Wenn keine Dateien vorhanden
    10. MsgBox "Keine Dateien"
    11. End If
    12. Next
    13. On Error GoTo 0


    Dann habe ich noch mit dieser Zeile:

    Quellcode

    1. Debug.Print oSourceFolder


    herausgefunden das wenn der Ordner fehlt mir ein anderer Ordner zurück gemeldet wird.
    Wie oben im Beispiel:
    In der Variable Path zu beginn der For Each Schleife steht: Var3 = "E:\Test\Test"
    Debug.Print oSourceFolder meldet aber nur noch E:\ zurück wenn z.B. 1 Ordner davon fehlt.
    Warum ist das so??

    Ich würde gerne folgendes machen. Wenn der Fehler 76 mal auftritt den Fehler überspringen und die fehlende Pfade
    in eine neue Array-Variable speichern für weitere Aktionen

    Quellcode

    1. On Error Resume Next
    2. For Each Path In Pathes
    3. Set oSourceFolder = oFSO.GetFolder(Path)
    4. If Err.Number = 76 Then
    5. ###################################################
    6. Vermutlich noch eine Schleife
    7. 'speichere den fehlenden Pfad in eine neue Array Variable falls es mehrere sind.
    8. Err.Clear
    9. End If


    Wer hätte da eine Idee für mich?
    Vielen Dank für die tolle Hilfe hier bei Euch.

    LG Poeci
    Hallo ISliceUrPanties,

    Vielen Dank für Deine Antwort war sehr hilfreich.
    Ich habe das jetzt so gelöst:

    Quellcode

    1. On Error Resume Next
    2. For Each Path In Pathes
    3. If oFSO.FolderExists(Path) Then
    4. Set oSourceFolder = oFSO.GetFolder(Path)
    5. If oSourceFolder.Files.Count = 0 Then 'Wenn keine Dateien vorhanden
    6. MsgBox "Keine Dateien"
    7. End If
    8. Else
    9. If Err.Number = 76 Then
    10. MsgBox Path & " fehlt "
    11. Err.Clear
    12. End If
    13. End If
    14. Next


    Vielen Dank nochmal für deine Hilfe

    LG Poeci