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

Prüfen ob Verzeichnis / Unterverzeichnisse leer

Forumthread: Prüfen ob Verzeichnis / Unterverzeichnisse leer

Prüfen ob Verzeichnis / Unterverzeichnisse leer
11.12.2024 12:51:24
earlycon
Hallo zusammen,
ich würde mich über eure Hilfe zu folgendem freuen:

In einem Verzeichnis befinden sich z.B. 5 Unterverzeichnisse. Ich möchte nun abfragen ob das Hauptverzeichnis inkl. aller Verzeichnisse leer ist bzw. wenn nicht leer, in welchem Verzeichnis sich Dateien befinden. Das Abfragen eines Verzeichnisses bekommen wohl hin mit

Dim strFolderPath As String
strFolderPath = Sheets("Einstellungen").[H4]
If CreateObject("Scripting.FileSystemObject").FolderExists(strFolderPath) = False Then
...

Aber das Abfragen der Unterverzeichnisse nicht.
Würde mich freuen, wenn jemand eine Idee hat.

Danke und viele Grüße
Stefan
Anzeige

13
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Prüfen ob Verzeichnis / Unterverzeichnisse leer
11.12.2024 13:30:24
daniel
Hi

folgendes Makro ermittelt die Anzahl der Dateien in einem Verzeichnis und dessen Unterverzeichnissen:

Sub Dateien_Abfragen()


ReDim pfade(0) As String
Dim p As Long
Dim x As String
ReDim zähler(0) As Long
Dim txt As String


pfade(0) = Sheets("Einstellungen").[H4] '--- Startverzeichnis, ohne "\" am Ende
p = 0
Do Until p > UBound(pfade)
x = Dir(pfade(p) & "\*", vbDirectory)
Do Until x = ""
If x = "." Or x = ".." Then
ElseIf (GetAttr(pfade(p) & "\" & x) And vbDirectory) = vbDirectory Then
ReDim Preserve pfade(UBound(pfade) + 1)
pfade(UBound(pfade)) = pfade(p) & "\" & x
ReDim Preserve zähler(UBound(pfade))
Else
zähler(p) = zähler(p) + 1
End If
x = Dir()
Loop
p = p + 1
Loop

For p = 0 To UBound(pfade)
txt = txt & vbLf & pfade(p) & ": " & zähler(p)
Next

MsgBox "Dateien im Verzeichnis:" & txt


End Sub


Gruß Daniel
Anzeige
AW: Prüfen ob Verzeichnis / Unterverzeichnisse leer
11.12.2024 14:43:20
earlycon
Hi Daniel,
ich hatte zuerst Yal´s Code ausprobiert (weil kürzer), aber da fliege ich aus der Funktion raus... ???

Dein Code mit der Ausgabe gefällt mir aber besser, hätte ich niemals hinbekommen. Vielen Dank.
Wäre es ein großer Aufwand, in der Ausgabe nicht den gesamten Pfad, sondern nur das Hauptverzeichnis und das jeweilige Unterverzeichnis auszugeben ? Ich habe da so meine Probleme mit. Jedenfalls wäre es noch etwas übersichtlicher...

Herzlichen Dank und Gruß
Stefan
Anzeige
AW: Prüfen ob Verzeichnis / Unterverzeichnisse leer
11.12.2024 14:58:29
daniel
For p = 0 To UBound(pfade)

txt = txt & vbLf & Replace(pfade(p), pfade(0), "...") & ": " & zähler(p)
Next
MsgBox "Dateien im Verzeichnis: " & pfade(0) & txt
AW: Prüfen ob Verzeichnis / Unterverzeichnisse leer
11.12.2024 15:07:07
earlycon
Oh man... wieso weiß ich so wenig... 😄 Vielen lieben Dank Daniel, perfekt 👍🏼
Anzeige
AW: Prüfen ob Verzeichnis / Unterverzeichnisse leer
11.12.2024 13:45:43
Yal
Moin Stefan,

Anbei eine rekursive Variante. Die Bibliothek "Microsoft Scripting Runtime" muss man wg. FileSystemObject anbinden.

'Unter Anbindung von:

'(in VBA-Editor, Menü "Extras", "Verweise…", Bibliothek anhaken)
' Microsoft Scripting Runtime

Public FSO As FileSystemObject

Sub Start()
Set FSO = New FileSystemObject
Debug.Print AnzahlDateien("C:\temp", True)
End Sub

Public Function AnzahlDateien(Verz As String, Optional Rekursiv = False) As Long
Dim F As Folder
Dim Erg As Long

With FSO.GetFolder(Verz)
Erg = .Files.Count
If Rekursiv Then
For Each F In .SubFolders
Erg = Erg + AnzahlDateien(F.Path, True)
Next
End If
End With
AnzahlDateien = Erg
End Function


VG
Yal
Anzeige
AW: Prüfen ob Verzeichnis / Unterverzeichnisse leer
11.12.2024 14:20:56
earlycon
Moin Yal,

vielen Dank (mal wieder 😉).

Leider springt der Code bei "For Each F In .SubFolders" in der Funktion raus...
Der Pfad wird richtig übergeben.... seltsam. Hast Du eine Idee... ?

VG Stefan
AW: Prüfen ob Verzeichnis / Unterverzeichnisse leer
11.12.2024 14:27:44
earlycon
Hab den Fehler gefunden... ich hatte ein \ am Ende, dass mochte der Code natürlich nicht.

So geht es, super 👍🏼 Der Übersicht wegen wäre es gut, wenn zum Schluss nicht die ganzen Pfade ausgegeben werden würden, sondern nur der Hauptpfad und der Unterpfad (Unterverzeichnis). Wäre das zu viel verlang... ? Ich habe da immer so meine Schwierigkeiten...

Herzlichen Dank Yal 🖐🏼
Anzeige
AW: Prüfen ob Verzeichnis / Unterverzeichnisse leer
11.12.2024 16:39:21
Yal
Hallo Stefan,

"wenn zum Schluss nicht die ganzen Pfade ausgegeben werden würden, sondern nur der Hauptpfad und der Unterpfad (Unterverzeichnis)"

Da sprichst du von etwas, was nicht durch meinem Code entsteht. Bei mir gibt es keine Ausgabe, ausser die Anzahl von Dateien.

VG
Yal
Anzeige
AW: Prüfen ob Verzeichnis / Unterverzeichnisse leer
11.12.2024 13:46:28
{Boris}
Hi,

kleiner Tipp für die Zukunft: Sowas kann die KI-Unterstützung ganz gut.
Hab das grad mal getestet und folgenden Code bekommen, der bei mir auch funktioniert (Ausgabe erfolgt im Direktfenster von VBA):

Sub CheckFilesInDirectories()

Dim fso As Object
Dim mainFolder As Object
Dim folderPath As String

' Hauptverzeichnis angeben
folderPath = Sheets("Einstellungen").Range("H4") ' Passe den Pfad an

' Überprüfen, ob das Hauptverzeichnis existiert
Set fso = CreateObject("Scripting.FileSystemObject")
If Not fso.FolderExists(folderPath) Then
MsgBox "Das angegebene Hauptverzeichnis existiert nicht.", vbExclamation
Exit Sub
End If

' Starten der Durchsuchung
Set mainFolder = fso.GetFolder(folderPath)
Call SearchFilesInFolder(mainFolder)

MsgBox "Prüfung abgeschlossen.", vbInformation
End Sub

Sub SearchFilesInFolder(folder As Object)
Dim subFolder As Object
Dim file As Object
Dim fileCount As Integer

' Dateien im aktuellen Ordner zählen
fileCount = 0
For Each file In folder.Files
fileCount = fileCount + 1
Next file

' Ergebnis anzeigen, wenn Dateien gefunden wurden
If fileCount > 0 Then
Debug.Print "Ordner: " & folder.Path & " | Dateien: " & fileCount
End If

' Unterordner durchsuchen
For Each subFolder In folder.Subfolders
Call SearchFilesInFolder(subFolder)
Next subFolder
End Sub


VG, Boris
Anzeige
AW: Prüfen ob Verzeichnis / Unterverzeichnisse leer
11.12.2024 16:42:25
Yal
Moin,

ChatGPT scheint die Abkürzung von
    ' Dateien im aktuellen Ordner zählen

fileCount = 0
For Each file In folder.Files
fileCount = fileCount + 1
Next file


nicht zu kennen:
fileCount =  folder.Files.Count


Biologische Intelligence hat noch ein paar Jahre die Oberhand :-)

VG
Yal
Anzeige
Das mag sein ;-)
11.12.2024 20:13:31
{Boris}
Hi Yal,

...bin dennoch immer wieder beeindruckt, wie schnell man damit nen funktionierenden Code bekommt ;-)
Und die KI soll ja auch noch was lernen können :-)

VG, Boris
AW: Das mag sein ;-)
12.12.2024 10:45:30
Yal
Moin Boris,

Verzeichnisse rekursiv ablesen ist ein Klassiker unter den Code Katas.

Ja, KI ist ein Beschleuniger und kann bei vielen einfachen Aufgabe unterstützen. Es muss aber dem Benutzer immer bewusst sein, dass KI nicht weisst, dass es etwas nicht weisst. Und deswegen ist es die Aufgabe der Anwender kritisch ranzugehen: was steht darin nicht, was stehen sollte (oder in dem Fall könnte).

VG
Yal
Anzeige
AW: Das mag sein ;-)
12.12.2024 12:05:44
{Boris}
Moin Yal,

das größte Problem ist doch, dass KI nicht sagt "ich weiß es nicht", sondern stattdessen mit dem Brustton der Überzeugung Blödsinn erzählt ;-)
Ich wollte vor ein paar Wochen wissen wie man herausfindet, ob sich ein Bild IN einer Zelle befindet (die neue Funktion in 365).
ChatGPT "wusste" sofort Bescheid: "Du musst die HasPicture-Eigenschaft verwenden" ;-)

VG, Boris
Anzeige
Anzeige
Anzeige
Live-Forum - Die aktuellen Beiträge
Datum
Titel
14.05.2026 13:31:09
14.05.2026 09:50:42
13.05.2026 19:14:18