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

Dateiliste mit Eigenschaften

Forumthread: Dateiliste mit Eigenschaften

Dateiliste mit Eigenschaften
Dirk
Hallo zusammen!
Ich möchte über VBA eine Liste mit Excel-Dateien in einem frei wählbaren Verzeichnis erstellen.
Das funktioniert ganz gut und ich kann in die Liste den Pfad, Dateinamen, Größe, .. eintragen.
wks.Cells(iCounter + 1, 3).Value = Left(.FoundFiles(iCounter), InStrRev(.FoundFiles(iCounter), "\") - 1) 'Pfad
wks.Cells(iCounter + 1, 4).Value = Mid(.FoundFiles(iCounter), _
InStrRev(.FoundFiles(iCounter), "\") + 1, Len(.FoundFiles(iCounter))) 'Dateiname
wks.Cells(iCounter + 1, 5).Value = FileLen(.FoundFiles(iCounter)) 'Dateigröße
wks.Cells(iCounter + 1, 6).Value = FileDateTime(.FoundFiles(iCounter)) 'letztes Speicherdatum
Gibt es eine Möglichkeit, den Code so zu erweitern, das auch weitere Dateieigenschaften in den
nächsten Spalten angezeigt werden, oder kann man auf die Dateieigenschaften nur in einer geöffneten
Datei zugreifen?
Vielen Dank schomal für Eure Anregungen
Dirk
Anzeige

7
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Benutzer
Anzeige
AW: Dateiliste mit Eigenschaften
20.10.2011 06:32:17
Dirk
Hallo Dirk,
hier mal ein Macro um durch alle Dateien durchzugehen:

Sub ListAllFile()
Dim objFSO As Object
Dim objFolder As Object
Dim objFile As Object
Dim ws As Worksheet
Set objFSO = CreateObject("Scripting.FileSystemObject")
Set ws = Worksheets.Add
'Get the folder object associated with the directory   !!! Hier das Laufwerk und den  _
Verzeichnispfad setzen
Set objFolder = objFSO.GetFolder("C:\")
'  !!!!  und hier noch die Zelle ab welcher die Dateinamen eingetragen werden sollen  Cells( _
Zeile, Spalte)
ws.Cells(1, 1).Value = "The files found in " & objFolder.Name & "are:"
'Loop through the Files collection
For Each objFile In objFolder.Files
if lcase(right(objfile.name,3)) = "xls" then
'hier den Dateityp festlegen, falls 4stellig 3 auf 4 aendern!!
ws.Cells(ws.UsedRange.Rows.Count + 1, 1).Value = objFile.Name
'weitere eigenschaften:
'objFile.name
'objFile.Size
'objFile.Type
'objFile.DateCreated
'objFile.DateLastAccessed
'objFile.DateLastModified
'objFile.Attributes
'objFile.ShortPath
'objFile.ShortName
end if
Next
'Clean up!
Set objFolder = Nothing
Set objFile = Nothing
Set objFSO = Nothing
End Sub
Du kannst alle Eigenschaften in verschiedene Zellen eintragen.
Lass' horen, ob hilfreich.
Gruss
Dirk aus Dubai
Anzeige
AW: Dateiliste mit Eigenschaften
20.10.2011 07:53:11
Dirk
Hallo Dirk,
vielen Dank für die Hilfe. Ich komme erst heute Abend dazu, das mal auszuprobieren.
Mir geht es speziell um die Eigenschaften der Datei, die ich unter "Datei - Eigenschaften" festlegen kann.
Also Titel, Kategorie, Kommentare,....
Kann ich mir die über Deine Lösung auch anzeigen lassen?
Gruß, Dirk
Anzeige
AW: Dateiliste mit Eigenschaften
20.10.2011 08:16:01
Nepumuk
Hallo,
so?

Public Sub Dateieigenschaften()
    'von K.Rola
    Const FOLDER_PATH As String = "D:\Eigene Dateien\Eigene Dokumente"
    Dim objShell As Object, objFolder As Object
    Dim intIndex As Integer, intColumn As Integer, lngRow As Long
    Dim varName
    If Dir(FOLDER_PATH, 16) = "" Then
        MsgBox "Der Ordner " & FOLDER_PATH & " wurde nicht gefunden!", 64, "Hinweis"
        Exit Sub
    End If
    Application.ScreenUpdating = False
    Cells.Clear
    Set objShell = CreateObject("Shell.Application")
    Set objFolder = objShell.Namespace(FOLDER_PATH)
    intColumn = 1
    For intIndex = 0 To 255
        Cells(1, intColumn + intIndex) = objFolder.GetDetailsOf(varName, intIndex)
    Next
    Rows(1).Font.Bold = True
    lngRow = 2
    For Each varName In objFolder.Items
        For intIndex = 0 To 255
            Cells(lngRow, intColumn + intIndex) = objFolder.GetDetailsOf(varName, intIndex)
        Next
        lngRow = lngRow + 1
    Next
    Columns.AutoFit
    Application.ScreenUpdating = True
End Sub

Gruß
Nepumuk
Anzeige
AW: Dateiliste mit Eigenschaften
20.10.2011 21:38:24
Dirk
Hallo Nepomuk,
genau diese Auswertung habe ich gesucht. Vielen Dank erstmal.
Von der Menge der Eigenschaften wird man ja erschlagen.
Um das ganze für mich perfekt zu machen habe ich noch die ergänzenden Fragen:
- Kann man das ganze auf bestimmte Eigenschaften beschränken?
- Wie kann man Unterordner durchsuchen lassen?
- Wie kann man die Dateiart (xls, doc) eingrenzen und dafür die Unterordner weglassen?
Viele Grüße
Dirk
Anzeige
AW: Dateiliste mit Eigenschaften
20.10.2011 23:47:43
Nepumuk
Hallo,
ein Beispiel zu weiterbasteln:

Public Sub Beispiel()
    
    Const FILE_FOLDER = "D:\Eigene Dateien\Eigene Tabellen\"
    Const FILE_PROPERTY = "Kommentare"
    Const FILE_NAME = "*.xls"
    Const MAX_PROPERTYS = 255
    
    Dim objShell As Object, objFolder As Object
    Dim strFile As String
    Dim lngIndex As Long, lngPosition As Long, lngRow As Long
    
    ' initialize errorhandler
    On Error GoTo error_exit
    
    ' verify folder exit
    If Dir$(FILE_FOLDER, vbDirectory) = "" Then _
        Err.Raise Number:=vbObjectError, Description:="Ordner ''" & FILE_FOLDER & "'' nicht gefunden."
    
    ' create object
    Set objShell = CreateObject(Class:="Shell.Application")
    
    ' set reverence to folder
    Set objFolder = objShell.Namespace((FILE_FOLDER))
    
    ' search position of fileproperty
    For lngIndex = 0 To MAX_PROPERTYS
        If Trim$(objFolder.GetDetailsOf("", lngIndex)) <> "" Then
            If Cbool(InStr(FILE_PROPERTY, objFolder.GetDetailsOf("", lngIndex))) Then
                lngPosition = lngIndex
                Exit For
            End If
        End If
    Next
    
    ' property not found - trigger an error
    If lngPosition = 0 Then _
        Err.Raise Number:=vbObjectError, Description:="Dateieigenschaft ''" & _
        FILE_PROPERTY & "'' nicht gefunden."
    
    ' get first file
    strFile = Dir$(FILE_FOLDER & FILE_NAME, vbNormal)
    
    ' loop over all files
    Do While strFile <> ""
        
        ' counter for rows in table
        lngRow = lngRow + 1
        
        ' write filename and property to table
        With Tabelle1
            .Cells(lngRow, 1).Value = strFile
            .Cells(lngRow, 2).Value = objFolder.GetDetailsOf( _
                objFolder.ParseName(strFile), lngPosition)
        End With
        
        ' get next file
        strFile = Dir$
        
    Loop
    
    Tabelle1.Columns.AutoFit
    
    sub_exit:
    
    ' clear objects
    Set objShell = Nothing
    Set objFolder = Nothing
    
    Exit Sub
    
    error_exit:
    
    ' show errormessage
    MsgBox "Fehler: " & CStr(Err.Number) & vbLf & vbLf & _
        Err.Description, vbCritical, "Fehler"
    Resume sub_exit
    
End Sub

In Unterordner kommst du mit Dir$ natürlich nicht, aber dazu gibt es ja mehrere Alternativen.
Gruß
Nepumuk
Anzeige
AW: Dateiliste mit Eigenschaften
21.10.2011 18:02:02
Dirk
Hallo Nepomuk,
vielen Dank für das Beispiel. Ich bin schon fleißig am Basteln und denke,
dass ich jetzt klarkomme.
Anfrage ist aus meiner Sicht geschlossen!!
Viele Grüße
Dirk
AW: Dateiliste mit Eigenschaften
20.10.2011 21:33:02
Dirk
Hallo Dirk,
ich habe Deinen Code getestet und komme gut damit klar.
Mir ging es aber tatsächlich um die weiteren Dateieigenschaften wie in meinem zweiten Posting beschrieben.
Trotzdem vielen Dank für Deine Hilfe
Dirk aus Hessen
Anzeige
;
Anzeige
Anzeige

Infobox / Tutorial

Dateiliste mit Eigenschaften erstellen in Excel


Schritt-für-Schritt-Anleitung

Um eine Dateiliste mit Eigenschaften in Excel zu erstellen, kannst du VBA verwenden. Hier ist eine einfache Schritt-für-Schritt-Anleitung:

  1. Öffne Excel und drücke ALT + F11, um den VBA-Editor zu öffnen.

  2. Füge ein neues Modul hinzu: Rechtsklick auf "VBAProject (deineDatei.xlsx)" > Einfügen > Modul.

  3. Kopiere den folgenden Code in das Modul:

    Sub DateilisteErstellen()
       Dim objFSO As Object
       Dim objFolder As Object
       Dim objFile As Object
       Dim ws As Worksheet
       Dim iCounter As Long
    
       Set objFSO = CreateObject("Scripting.FileSystemObject")
       Set ws = Worksheets.Add
       Set objFolder = objFSO.GetFolder("C:\Pfad\zum\deinem\Ordner") ' Pfad anpassen
    
       ws.Cells(1, 1).Value = "Dateiname"
       ws.Cells(1, 2).Value = "Größe"
       ws.Cells(1, 3).Value = "Erstellt"
       ws.Cells(1, 4).Value = "Zuletzt geändert"
    
       iCounter = 0
    
       For Each objFile In objFolder.Files
           iCounter = iCounter + 1
           ws.Cells(iCounter + 1, 1).Value = objFile.Name
           ws.Cells(iCounter + 1, 2).Value = objFile.Size
           ws.Cells(iCounter + 1, 3).Value = objFile.DateCreated
           ws.Cells(iCounter + 1, 4).Value = objFile.DateLastModified
       Next objFile
    
       Set objFolder = Nothing
       Set objFile = Nothing
       Set objFSO = Nothing
    End Sub
  4. Passe den Pfad in der Zeile Set objFolder = objFSO.GetFolder("C:\Pfad\zum\deinem\Ordner") an, um auf den gewünschten Ordner zuzugreifen.

  5. Führe das Makro aus: Drücke F5 oder gehe zu "Run" > "Run Sub/UserForm".


Häufige Fehler und Lösungen

  • Fehler: "Ordner nicht gefunden"

    • Lösung: Überprüfe den angegebenen Pfad. Achte darauf, dass der Ordner existiert.
  • Excel stürzt ab oder reagiert nicht

    • Lösung: Stelle sicher, dass du in einem neuen Modul arbeitest und keine Endlosschleifen im Code hast.
  • Eigenschaften werden nicht angezeigt

    • Lösung: Vergewissere dich, dass du die richtigen Dateieigenschaften abfragst. Nutze objFile.DateLastModified für das letzte Änderungsdatum.

Alternative Methoden

Falls du die Dateiliste von Ordnerinhalt erstellen möchtest, ohne VBA zu verwenden, kannst du auch die Datei-Explorer-Funktion nutzen und die Eigenschaften manuell exportieren. Eine weitere Möglichkeit ist die Nutzung von Power Query in Excel, um Daten aus Ordnern zu importieren.


Praktische Beispiele

Hier sind einige Beispiele, wie du den Code erweitern kannst, um zusätzliche Eigenschaften anzuzeigen:

ws.Cells(iCounter + 1, 5).Value = objFile.Type ' Dateityp
ws.Cells(iCounter + 1, 6).Value = objFile.Attributes ' Dateiattribute

Wenn du nur bestimmte Eigenschaften wie den Titel oder Kommentare anzeigen möchtest, kannst du den Code entsprechend anpassen, indem du GetDetailsOf verwendest:

Dim objShell As Object
Set objShell = CreateObject("Shell.Application")
Set objFolder = objShell.Namespace("C:\Pfad\zum\deinem\Ordner")

Tipps für Profis

  • Verwende die GetDetailsOf-Methode, um spezifische Excel Eigenschaften abzurufen, die du in den Spalten anzeigen möchtest.
  • Nutze Application.ScreenUpdating = False, um die Ausführungsgeschwindigkeit zu erhöhen, wenn du viele Dateien durchsuchst.
  • Experimentiere mit der icounter-Variable, um die Anzahl der Dateien zu zählen und die Ausgabe zu formatieren.

FAQ: Häufige Fragen

1. Kann ich die Dateiliste auch von Unterordnern erstellen? Ja, du kannst den Code anpassen, um auch Unterordner zu durchsuchen, indem du rekursive Funktionen verwendest.

2. Welche Excel-Version benötige ich für diese VBA-Skripte? Die Skripte funktionieren in Excel 2007 und neueren Versionen.

3. Wie kann ich die Dateieigenschaften auf bestimmte Typen beschränken? Du kannst eine If-Bedingung einfügen, die die Dateiendung überprüft, bevor du sie zur Liste hinzufügst.

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige