Microsoft Excel

Herbers Excel/VBA-Archiv

Anzahl von Dateien

Betrifft: Anzahl von Dateien von: Christian
Geschrieben am: 01.08.2020 21:57:11

Hallo,


ich vermute mal, mein Problem lässt sich nur mit VBA lösen, da ich aber eine Formellösung suche, würde es mich freuen, wenn ihr mir mit 2 UDF aushelft.


Folgendes Problem,


ich habe 2 Ordner,


D:\AZN\Bilder und D:\AZN\Videos


Ich suche nun 2 Formeln, die mir jeweils sagen, wieviele Dateinamen in dem jeweiligen Ordner mit dem Text anfangen, der in der Zelle K1 steht.


Geht sowas und wenn ja, wie?


Habe bereits eine UDF, die mir zumindest sagt ob in einer der beiden Ordner Dateien vorhanden sind oder nicht, vielleicht lässt sich davon ja was wiederverwenden:


Option Explicit

Private Declare PtrSafe Function SearchTreeForFile Lib "imagehlp.dll" ( _
    ByVal RootPath As String, _
    ByVal InputPathName As String, _
    ByVal OutputPathBuffer As String) As Long

Private Const MAX_PATH As Long = 260&
Private Const FOLDER_PATH As String = "D:\AZN\" ' Anpassen !!!!!!!!!!!!!!!!

Public Function SearchFile(ByVal pvstrFileName As String) As String
    
    Dim strTemp As String * MAX_PATH
    Dim lngReturn As Long
    
    lngReturn = SearchTreeForFile(FOLDER_PATH, "*" & pvstrFileName & "*", strTemp)
    
    If lngReturn = 0 Then
        SearchFile = "Nein"
    Else
        SearchFile = "Ja"
    End If
End Function

Betrifft: AW: Anzahl von Dateien
von: onur
Geschrieben am: 02.08.2020 01:17:27

Kannst du auch als Excel-Formel benutzen:
Public Function AnzDat(Ordner, ByVal such As String) As Long
    Application Volatile
    Dim anz As Long
    Dim fso As Object
    Dim path As Object
    Dim DatList As Object
    Dim Dat As Object
    Dim le, leda
    Set fso = CreateObject("scripting.FileSystemObject")
    Set path = fso.GetFolder(Ordner)
    Set DatList = path.Files
    le = Len(such)
    For Each Dat In DatList
         If Not Dat Is Nothing Then
            leda = Len(Dat.Name)
            If Left(Dat.Name, le) = such Then
                anz = anz + 1
                ActiveSheet.Cells(anz, 1) = Dat.Name
            End If
        End If
    Next Dat
    AnzDat = anz
End Function

Aufruf als Formel:
= AnzDat("Mein Pfad", Range("K1").Text)

Betrifft: AW: Anzahl von Dateien
von: Christian
Geschrieben am: 02.08.2020 08:08:00

Hallo Onur,
danke erstmal für die Mühe.

Aber wenn ich =AnzDat("D:\AZN\Video";Range("K1").Text) eingebe, fragt er mich, ob ich überhaupt eine Formel eingeben möchte.

Wenn ich wie du gemeint hast ein Komma statt dem Semikolon nehme, dasselbe.

Die Formel Anzdat ist bekannt. War doch richtig, sie in ein Modul zu stecken oder?

Gruß
Christian

Betrifft: AW: Anzahl von Dateien
von: Hajo_Zi
Geschrieben am: 02.08.2020 08:30:07

Hallo Christian,

in Zelle
=AnzDat("W:\Eigene Dateien\Hajo\Internet\Test\2020\Woche";K1)
Option Explicit

Public Function AnzDat(Ordner, ByVal such As String) As Long
     Application.Volatile
     Dim anz As Long
     Dim fso As Object
     Dim path As Object
     Dim DatList As Object
     Dim Dat As Object
     Dim le, leda
     Set fso = CreateObject("scripting.FileSystemObject")
     Set path = fso.GetFolder(Ordner)
     Set DatList = path.Files
     le = Len(such)
     For Each Dat In DatList
          If Not Dat Is Nothing Then
             leda = Len(Dat.Name)
             If Left(Dat.Name, le) = such Then
                 anz = anz + 1
'                 ActiveSheet.Cells(anz, 1) = Dat.Name
             End If
         End If
     Next Dat
     AnzDat = anz
 End Function
Gruß Hajo

Betrifft: AW: Anzahl von Dateien
von: Christian
Geschrieben am: 02.08.2020 08:36:42

Guten morgen Hajo,

ich habe inzwischen nachdem ich den letzten Post geschrieben habe selbst gegooglet und nachgedacht, woran es liegen könnte
auf Option Explicit und dem . vor volatile war ich auch bereits gekommen.

Aber das einfachste, da einfach K1 reinzuschreiben in die Formel... manchmal sieht man den Wald auch vor lauter Bäumen nicht.

Aber danke für deine Mühe
Christian

PS: Kleine Anmerknung noch an Onur, ich kann mich nicht erinnern, dass jemals einer meiner Forumsbeiträge so dringend war, dass ich mitten in der Nacht eine Lösung gebräucht hätte. Falls du nochmal irgendwann mir helfen solltest, darfst du gerne auch erstmal ausschlafen.

Betrifft: AW: Anzahl von Dateien
von: onur
Geschrieben am: 02.08.2020 12:03:55

Sorry, ich hate die UDF eigentlich als Sub entwickelt und getestet, und erst hinterher kam mir die Idee mit der UDF, habe sie dann schnell als UDF umgemodelt und nicht getestet.

Betrifft: AW: Anzahl von Dateien
von: Niclaus Wurthberg
Geschrieben am: 02.08.2020 17:12:13

Hallo
Ich habe die Function von onur und Hajo in ein Sub umgeschrieben: Es soll mir die Anzahl der Dateien eines bestimmten Ordners ausgeben, die mit "test" beginnen, und diese Dateien in eine Tabelle schreiben.
Sub AnzahlDateien2()
    Dim pfad As String, such As String
    Dim anz As Long
    Dim fso As Object
    Dim path As Object
    Dim DatList As Object
    Dim Dat As Object
    Dim le, leda
    pfad = "D:\Documents\Varia\"
    such = "test"
    Range("A1") = pfad
    Range("B1") = such
    Application.Volatile
    Set fso = CreateObject("scripting.FileSystemObject")
    Set path = fso.GetFolder(pfad)
    Set DatList = path.Files
    le = Len(such)
    For Each Dat In DatList
         If Not Dat Is Nothing Then
            leda = Len(Dat.Name)
            If Left(Dat.Name, le) = such Then
                anz = anz + 1
                Cells(anz + 1, 1) = Dat.Name
            End If
        End If
    Next Dat
    Range("C1") = anz
End Sub
Nun erhalte ich 18 als Resultat – auch wenn ich sie ermittle mit der
Function AnzDat(Ordner, ByVal such As String) As Long

Effektiv aber sind es 29 Dateien.
In Spalte E sind mit #NV diejenigen Dateien bezeichnet, die nicht gezählt wurden.



Ich hänge auch die entsprechende Datei an. Dort auch mit einem Printscreen aus dem Windows-Explorer.

Könnt Ihr mir sagen, wie es zu dieser Differenz kommt? Was ich falsch gemacht habe in meinem Makro?
Vielen Dank Niclaus

https://www.herber.de/bbs/user/139422.xlsm

Betrifft: AW: Anzahl von Dateien
von: onur
Geschrieben am: 02.08.2020 17:37:14

An der Gross- Kleinschreibung natürlich !
Nimm das hier:
If UCASE(Left(Dat.Name, le)) = UCASE(such) Then

Betrifft: AW: Anzahl von Dateien
von: Niclaus Wurthberg
Geschrieben am: 02.08.2020 22:18:51

Hallo O N U R
Wenn man Dich nicht hätte!!!
Vielen Dank
piccolissimo nicolino

PS Ich hab's auch mit "Option Compare Text" hingekriegt.