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

Anzahl aller Ordner per VBA

Forumthread: Anzahl aller Ordner per VBA

Anzahl aller Ordner per VBA
29.02.2016 17:10:27
Vic
Hallo,
ich scheitere gerade an folgender Problemstellung:
Ich möchte per VBA prüfen, ob in einem zuvor gewählten Verzeichnis eine bestimmte Anzahl Unterordner (gesamte Ordnerstruktur) überschritten wird. Also die Anzahl Ordner, die man in den Ordnereigenschaften "Inhalt" beim Windows-Explorer angezeigt bekommen würde.
Mit SubFolders.Count wird mir nur die jeweils erste Ebene ausgegeben.
Wie bekomme ich die Gesamtzahl aller Unter- und Unterordner in beliebiger Tiefe in eine Variable, die ich abprüfen kann? Ich möchte dabei ungern mit Hilfstabellen arbeiten, die das Verzeichnis samt Dateien erst auslesen und auflisten etc. - dazu habe ich genug Code im Archiv gefunden, aber mir genügt die Anzahl in einer Variablen. Die Anzahl der enthaltenen Dateien ist auch unerheblich.
Danke für eure Hilfe
Vic

Anzeige

5
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
Anzahl aller Ordner per VBA
29.02.2016 17:36:56
Anton
Hallo Vic,
Sub ordner_anzahl()
Dim objShell As Object, objExec As Object
Dim vntRet As Variant, strFolder As String
strFolder = "F:\2013" 'anpassen
Set objShell = CreateObject("WScript.Shell")
ChDrive Left(strFolder, 1)
ChDir strFolder
Set objExec = objShell.Exec("cmd /c dir /s /b /a:d")
vntRet = Split(objExec.StdOut.ReadAll, vbCrLf)
If UBound(vntRet) > 0 Then MsgBox UBound(vntRet)
Set objShell = Nothing
Set BrowseDir = Nothing
End Sub
mfg Anton

Anzeige
AW: Anzahl aller Ordner per VBA
29.02.2016 17:39:27
Daniel
Hi
mit folgendem Code kannst du die Anzahl der Unterordner in einem Verzeichnis zählen.
beim ersten IF wird die maximale Strukturtiefe festgelegt:
Sub Unterordner_Zählen()
Dim Ordner() As String
Dim i As Long
Dim Datei As String
ReDim Ordner(0)
Ordner(0) = "C:\Daten\"
i = 0
Do While i  ""
If (GetAttr(Ordner(i) & Datei) And vbDirectory) = vbDirectory Then
If Not Datei Like ".*" Then
ReDim Preserve Ordner(UBound(Ordner) + 1)
Ordner(UBound(Ordner)) = Ordner(i) & Datei & "\"
End If
End If
Datei = Dir
Loop
End If
i = i + 1
Loop
MsgBox "Anzahl Unterordner = " & UBound(Ordner)
End Sub
Gruß Daniel

Anzeige
AW: Anzahl aller Ordner per VBA
01.03.2016 09:10:02
Vic
Danke Anton und Daniel - beide Varianten funktionieren, wobei die von Anton etwas schneller ist. _ Allerdings wird dabei kurz das cmd-Fenster angezeigt (stört mich aber nicht). In der letzten Zeile hat sich ein Fehler eingeschlichen. Richtig müsste dort mit

Set objExec = Nothing
entladen werden?
Danke und Gruß!
Vic

Anzeige
AW: Anzahl aller Ordner per VBA: cmd dir
01.03.2016 09:20:42
Michael
Hallo,
es ist mit xl zwar möglich, die Aufgabe zu lösen, aber warum xl?
Der cmd-Befehl "dir" mit dem richtigen Schalter und "grösser-Zeichen Datei-Name" schreibt die ganze Liste in eine Txt-Datei, die dann mit xl geöffnet und bearbeitet werden kann.
Mfg

AW: Anzahl aller Ordner per VBA: cmd dir
01.03.2016 10:11:31
Vic
Hallo Michael,
die Abfrage der Verzeichnistiefe dient nur der Absicherung des restlichen Codes, mit dem ich die NTFS-Berechtigungen auslese und in einer Tabelle aufliste. Damit das ganze händelbar bleibt (und ich nicht immer vorher das Netzlaufwerk durchklicken muss) prüfe ich vorab, wie viele Ordner in einem Verzeichnis liegen. Wird eine gewisse Ordner-Anzahl überschritten, kann ich die Aktion abbrechen und eine Ebene tiefer auslesen.
Gruß Vic
Anzeige
Anzeige
Anzeige

Infobox / Tutorial

Anzahl aller Ordner per VBA ermitteln


Schritt-für-Schritt-Anleitung

Um die Anzahl aller Ordner in einem Verzeichnis und dessen Unterverzeichnissen per VBA zu ermitteln, kannst du die folgende Schritt-für-Schritt-Anleitung befolgen:

  1. Öffne Excel und drücke ALT + F11, um den VBA-Editor zu öffnen.
  2. Erstelle ein neues Modul, indem du im Projekt-Explorer mit der rechten Maustaste auf "VBAProject" klickst und "Einfügen" > "Modul" auswählst.
  3. Kopiere den folgenden VBA-Code in das Modul:
Sub ordner_anzahl()
    Dim objShell As Object, objExec As Object
    Dim vntRet As Variant, strFolder As String
    strFolder = "F:\2013" ' anpassen
    Set objShell = CreateObject("WScript.Shell")
    ChDrive Left(strFolder, 1)
    ChDir strFolder
    Set objExec = objShell.Exec("cmd /c dir /s /b /a:d")
    vntRet = Split(objExec.StdOut.ReadAll, vbCrLf)
    If UBound(vntRet) > 0 Then MsgBox "Anzahl aller Ordner: " & UBound(vntRet)
    Set objShell = Nothing
    Set objExec = Nothing
End Sub
  1. Passe den Pfad in der Variablen strFolder an dein gewünschtes Verzeichnis an.
  2. Führe das Skript aus, um die Anzahl der Ordner zu ermitteln.

Häufige Fehler und Lösungen

  • Problem: Das cmd-Fenster wird angezeigt.

    • Lösung: Dies ist normal, wenn du den cmd dir-Befehl verwendest. Es kann jedoch nicht verhindert werden, da der Befehl im Hintergrund ausgeführt wird.
  • Problem: Die Anzahl der Ordner wird nicht korrekt angezeigt.

    • Lösung: Stelle sicher, dass der Pfad in strFolder korrekt ist und dass du über die entsprechenden NTFS-Rechte verfügst, um auf das Verzeichnis zuzugreifen.

Alternative Methoden

Wenn du nicht mit VBA arbeiten möchtest, kannst du auch den cmd-Befehl direkt in die Windows-Eingabeaufforderung eingeben:

  1. Öffne die Windows-Eingabeaufforderung.
  2. Gebe den folgenden Befehl ein:
dir "C:\Daten\" /s /b /a:d > ordner_liste.txt
  1. Dies erstellt eine Datei namens ordner_liste.txt, die alle Unterverzeichnisse enthält. Du kannst dann die Anzahl der Zeilen in dieser Datei zählen, um die Anzahl der Ordner zu ermitteln.

Praktische Beispiele

Hier sind zwei Beispiele, um die Anzahl von Unterordnern in einem bestimmten Verzeichnis zu zählen:

  1. Beispiel 1: Verwenden des cmd-Befehls

    Der folgende Befehl zählt alle Unterordner im Verzeichnis C:\Daten\:

    cmd /c dir "C:\Daten\" /s /b /a:d
  2. Beispiel 2: Mit VBA und Ordner-Tiefe

    Du kannst die Tiefe der Ordnerstruktur in deiner VBA-Anwendung berücksichtigen, indem du den Code entsprechend anpasst, um nur bis zu einer bestimmten Tiefe zu zählen.


Tipps für Profis

  • Um die Leistung zu steigern, solltest du sicherstellen, dass alle nicht benötigten Variablen in deinem VBA-Code freigegeben werden.
  • Überlege dir, ob du die Anzahl der Unterverzeichnisse in einer Excel-Tabelle speichern möchtest, um diese später zu analysieren oder zu verwenden.
  • Achte darauf, dass du die NTFS-Rechte in deinem Code überprüfst, um sicherzustellen, dass du auf alle benötigten Verzeichnisse zugreifen kannst.

FAQ: Häufige Fragen

1. Wie kann ich die Anzahl der Unterverzeichnisse in einer bestimmten Tiefe zählen?
Du kannst die Schleife im VBA-Code so anpassen, dass sie eine maximale Tiefe für die Ordnersuche berücksichtigt.

2. Was kann ich tun, wenn ich nicht die nötigen NTFS-Rechte habe?
Du musst sicherstellen, dass dein Benutzerkonto über die entsprechenden Berechtigungen verfügt, um auf das Verzeichnis zuzugreifen. Wende dich an deinen Systemadministrator, wenn nötig.

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige