Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1672to1676
Aktuelles Verzeichnis
Verzeichnis Index
Übersicht Verzeichnisse
Vorheriger Thread
Rückwärts Blättern
Nächster Thread
Vorwärts blättern
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Inhaltsverzeichnis

Ordner / Verzeichnisse zählen

Ordner / Verzeichnisse zählen
13.02.2019 10:04:15
Heiko
Hallo Excelianer,
gibt es noch irgendeine Funktion in VBA (am liebsten Code), mit der man schnell die Anzahl von Unterverzeichnissen und Dateien in einem Verzeichnis feststellen kann?
Application.FileSearch geht nicht mehr (seit 10 Jahren)
Mit der Funktion GetAttr gibt's Probleme: Meistens "Datei nicht gefunden". Wenn man die GetAttr Funktion weglässt, findet man nur ein Unterverzeichnis. z.B. Steffens post vom 07.06.2010.
Leider konnte ich auch im Archiv unter "Ordner zählen", "Verzeichnisse zählen", "Anzahl Ordner" und "Anzahl Verzeichnisse" jeweils genau 0 Treffer landen...
Wäre für Tipps sehr dankbar,
Heiko

9
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: teste mal mit
13.02.2019 10:25:19
Fennek
Hallo,
hier werden mehrere Möglichkeiten gezeigt:
https://stackoverflow.com/questions/12934106/counting-folders-with-powershell
mfg
AW: Ordner / Verzeichnisse zählen
13.02.2019 10:27:28
Bernd
Servus Heiko,
schau mal auf Hajo`s Excelseiten vorbei. Dort sind gute Beispiele, wie man Dateien aus Ordnern auflisten lässt. Die Ordner selbst könnte man dann mit Standart-Excel-Funktionen auswerten...
http://hajo-excel.de/fremd_vba.htm
Grüße, Bernd
AW: Ordner / Verzeichnisse zählen
13.02.2019 10:32:17
Daniel
Hi
mit DIR selber zählen geht so:
Sub test()
Dim X As String
Dim AnzOrd As Long
Dim AnzDat As Long
Dim Pfad As String
Pfad = "C:\Windows\" 'untersuchtes Verzeichnis, ggf anpassen
X = Dir(Pfad & "*", vbDirectory)
Do While X  ""
If Not (X = "." Or X = "..") Then
If (GetAttr(Pfad & X) And vbDirectory) = vbDirectory Then
AnzOrd = AnzOrd + 1
Else
AnzDat = AnzDat + 1
End If
End If
X = Dir
Loop
MsgBox Pfad & vbLf & "Ordner: " & AnzOrd & vbLf & "Dateien: " & AnzDat
End Sub

Gruß Daniel
Anzeige
AW: Ordner / Verzeichnisse zählen
13.02.2019 10:51:22
Heiko
Hi Daniel, danke Dir.
Ich kenne den Code, mit anderen Variablennamen. Leider ist das der mit "Datei nicht gefunden" Fehler sobald GetAttr aufgerufen wird...
AW: Ordner / Verzeichnisse zählen
13.02.2019 11:10:29
Daniel
Hi
also bei mir geht's.
ist das schon beim ersten durchlauf so oder erst bei einer bestimmten Datei?
wenn das Problem erst bei einer bestimmten Datei auftritt, dann müsstest du dir mal diese Datei genauer anschauen und ermitteln, was diese Datei von den anderen unterscheidet und dann müsste man das Makro entsprechen anpassen, um darauf zu reagieren.
Gruß Daniel
AW: Ordner / Verzeichnisse zählen
13.02.2019 11:19:57
Heiko
Nee, passiert sofort...
AW: Ordner / Verzeichnisse zählen
13.02.2019 11:26:40
Daniel
dann weiß ich auch nicht.
bei mir geht's.
Gruß Daniel
Anzeige
AW: Ordner / Verzeichnisse zählen
13.02.2019 11:29:13
Heiko
Trotzdem danke! :-)
AW: Ordner / Verzeichnisse zählen
13.02.2019 13:09:09
Nepumuk
Hallo Heiko,
teste mal:
Option Explicit

Public Sub Beispiel()
    Const FOLDER_PATH As String = "G:\Eigene Dateien\" 'Anpassen
    Dim astrFolders() As String, astrFiles() As String
    Dim strFile As String
    Dim ialngFolders As Long, ialngFiles As Long
    astrFolders = GetFolders(FOLDER_PATH)
    For ialngFolders = LBound(astrFolders) To UBound(astrFolders)
        strFile = Dir$(astrFolders(ialngFolders) & "*.*")
        Do Until strFile = vbNullString
            Redim Preserve astrFiles(ialngFiles)
            astrFiles(ialngFiles) = astrFolders(ialngFolders) & strFile
            ialngFiles = ialngFiles + 1
            strFile = Dir$
        Loop
    Next
    MsgBox "Ordner: " & CStr(UBound(astrFolders) - 1)
    MsgBox "Dateien: " & CStr(UBound(astrFiles) - 1)
End Sub

Private Function GetFolders(ByVal pvstrPath As String) As String()
    Dim astrFolders() As String
    Dim strFolder As String, strPath As String
    Dim ialngIndex1 As Long, ialngIndex2 As Long
    strPath = pvstrPath
    Do
        strFolder = Dir$(strPath & "*", vbDirectory)
        Do Until strFolder = vbNullString
            If strFolder <> "." And strFolder <> ".." Then
                If GetAttr(strPath & strFolder) And vbDirectory Then
                    Redim Preserve astrFolders(0 To ialngIndex1)
                    astrFolders(ialngIndex1) = strPath & strFolder & "\"
                    ialngIndex1 = ialngIndex1 + 1
                End If
            End If
            strFolder = Dir$
        Loop
        If ialngIndex1 = ialngIndex2 Then Exit Do
        strPath = astrFolders(ialngIndex2)
        ialngIndex2 = ialngIndex2 + 1
    Loop
    GetFolders = astrFolders
End Function

Das Programm zählt alle Ordner und Dateien in allen Ordnern. Die Ordner und Dateinamen stehen dir in den Arrays zur Verfügung.
Gruß
Nepumuk
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige