VBA Tipp: Alle Dateien eines Verzeichnisses und seiner Unterverzeichnisse zählen

Aus DBWiki
Wechseln zu: Navigation, Suche

Anforderung

  • Ich will alle Dateien eines Verzeichnisses und aller seiner Unterverzeichnisse zählen.
  • Optional kann ich auch nur die Anzahl der Dateien des aktuellen Verzeichnissses (Ordner) ermitteln
    (Parameter OhneUnterordner = True).
  • Wenn der Pfad zum Startordner ungültig ist, wird ein Fehler ausgelöst.

Lösung

Das geht mit folgender Funktion, die in einem globalen Modul gespeichert wird.

Public Function DateienZählen(ByVal Startordner As String, _
                              Optional ByVal OhneUnterordner = False _
                              ) As Long
 
 ' Late Binding, kein Verweis auf "Microsoft Scripting Runtime" notwendig
 ' Quelle: http://www.dbwiki.net/
 
 Dim FSO            As Object  'Scripting.FileSystemObject
 Dim objOrdner      As Object  'Scripting.Folder
 Dim objUnterordner As Object  'Scripting.Folder
 Dim z              As Long
 
 Set FSO = CreateObject("Scripting.FileSystemObject")
 Set objOrdner = FSO.GetFolder(Startordner)
 
 z = objOrdner.Files.Count
 
 If OhneUnterordner = False Then
   ' Alle Unterverzeichnisse durchlaufen (rekursiver Funktionsaufruf)
   For Each objUnterordner In objOrdner.SubFolders
     z = z + DateienZählen(objUnterordner)
   Next
 End If
 
 DateienZählen = z
 
End Function

Aufruf

 Dim strOrdnerpfad As String
 
 strOrdnerpfad = CurrentProject.Path
 
 ' Beispiel 1: Dateien im angegebenen Ordner und allen Unterordnern zählen
 MsgBox DateienZählen(strOrdnerpfad) & " Dateien"
 
 ' Beispiel 2: Dateien nur im angegebenen Ordner zählen
 MsgBox DateienZählen(strOrdnerpfad, True) & " Dateien"