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

VBA - Dateieigenschaften auslesen

Forumthread: VBA - Dateieigenschaften auslesen

VBA - Dateieigenschaften auslesen
11.02.2020 22:27:49
WalterK
Schönen Abend,
den nachfolgenden Code habe ich schon vor vielen Jahren - glaube ich - in diesem Forum gefunden, Autor ist K.Rola. Damit werden alle Dateieigenschaften der in einem Ordner befindlichen Dateien ausgelesen. Läuft TipTop und m.E. rasend schnell.
2 Fragen hätte ich allerdings dazu:
1.) Kann man den Code so abändern damit er auch alle Dateien von Unterordner mit einschließt und ausliest.
2.) Kann man eine zusätzliche Spalte generieren in der pro Datei der komplette Pfad angegeben wird.
Hier noch der Code:
 Option Explicit
Sub Dateieigenschaften()
'von k.rola
Const STRFOLDER As String = "C:\Users\User\OneDrive\WalterOnedrive\Fotos" 'anpassen
Dim objShell As Object
Dim objFolder As Object
Dim x As Byte
Dim spalte As Integer
Dim zeile As Long
Dim varName, arrHeaders(34)
If Dir(STRFOLDER, 16) = "" Then
MsgBox "Der Ordner " & STRFOLDER & " wurde nicht gefunden!" & Space(10), 64, "weise hin..." _
Exit Sub
End If
Application.ScreenUpdating = False
Set objShell = CreateObject("Shell.Application")
Set objFolder = objShell.Namespace(STRFOLDER)
spalte = 1
For x = 0 To 33
arrHeaders(x) = objFolder.GetDetailsOf(varName, x)
Cells(1, spalte + x) = arrHeaders(x)
Next
Rows(1).Font.Bold = True
zeile = 2
For Each varName In objFolder.Items
For x = 0 To 33
Cells(zeile, spalte + x) = objFolder.GetDetailsOf(varName, x)
Next
zeile = zeile + 1
Next
Columns.AutoFit
Application.ScreenUpdating = True
End Sub
Besten Dank, Servus Walter
Anzeige

2
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: VBA - Dateieigenschaften auslesen
12.02.2020 12:04:11
fcs
Hallo Walter,
hier meine Anpassungen/Ergänzungen.
Ich weiß nicht, ob man die 34 Dateieigenschaften auch irgendwie über das FilescriptingSystem auslesen kann, dann könnte man das Makro etwas einfacher gestalten.
LG
Franz
Option Explicit
Private zeile As Long
Private x As Byte
Private spalte As Integer
Private objShell
Private FSO, FO, FU
Private objFolder
Sub Dateieigenschaften()
'von k.rola
Const STRFOLDER As String = "C:\Users\User\OneDrive\WalterOnedrive\Fotos" 'anpassen
Dim varName, arrHeaders(34)
If Dir(STRFOLDER, 16) = "" Then
MsgBox "Der Ordner " & STRFOLDER & " wurde nicht gefunden!" & Space(10), 64, "weise hin. _
.." _
Exit Sub
End If
Application.ScreenUpdating = False
ActiveSheet.UsedRange.Clear
Set FSO = CreateObject("Scripting.FileSystemObject")
Set FO = FSO.Getfolder(STRFOLDER)
Set objShell = CreateObject("Shell.Application")
Set objFolder = objShell.Namespace(STRFOLDER)
spalte = 0
For x = 0 To 33
spalte = spalte + 1
arrHeaders(x) = objFolder.GetDetailsOf(varName, x)
Cells(1, spalte) = arrHeaders(x)
Next
spalte = spalte + 1
Cells(1, spalte) = "Pfad"
Rows(1).Font.Bold = True
zeile = 2
Call GetDateieigenschaften
Columns.AutoFit
Range("B2").Select
ActiveWindow.FreezePanes = True
Application.ScreenUpdating = True
MsgBox "Fertig - Dateieigenschaften"
End Sub
Private Sub GetDateieigenschaften()
Dim varName
On Error GoTo Fehler
For Each varName In objFolder.Items
Select Case objFolder.GetDetailsOf(varName, 2) 'Elementtyp
Case "Dateiordner", "Folder"
'Dateiordner nicht listen
Case Else
spalte = 0
For x = 0 To 33
spalte = spalte + 1
Cells(zeile, spalte) = objFolder.GetDetailsOf(varName, x)
Next
spalte = spalte + 1
Cells(zeile, spalte) = objFolder.self.Path
zeile = zeile + 1
End Select
Next
Set FO = FSO.Getfolder(objFolder.self.Path)
For Each FU In FO.subfolders
Set objFolder = objShell.Namespace(FU.Path)
Call GetDateieigenschaften
Next
Fehler:
With Err
Select Case .Number
Case 0 'alles ok
Case Else
MsgBox "Fehler-Nr.: " & .Number & vbLf & .Description, _
vbInformation + vbOKOnly, "Makro: GetDateieigenschaften"
Exit Sub
End Select
End With
End Sub

Anzeige
AW: VBA - Dateieigenschaften auslesen
12.02.2020 13:02:30
WalterK
Hallo Franz,
was kann ich sagen: TipTop und vielen Dank, Du hast mir sehr geholfen.
Schönen Tag noch, Servus Walter
;
Anzeige
Anzeige

Infobox / Tutorial

VBA zum Auslesen von Dateieigenschaften


Schritt-für-Schritt-Anleitung

Um mit VBA die Dateieigenschaften auszulesen, kannst du den folgenden Code verwenden. Dieser Code liest alle wichtigen Informationen von Dateien in einem bestimmten Ordner aus und kann leicht angepasst werden, um auch Unterordner zu berücksichtigen:

Option Explicit
Sub Dateieigenschaften()
    Const STRFOLDER As String = "C:\Users\User\OneDrive\WalterOnedrive\Fotos" ' anpassen
    Dim objShell As Object
    Dim objFolder As Object
    Dim x As Byte
    Dim spalte As Integer
    Dim zeile As Long
    Dim varName, arrHeaders(34)

    If Dir(STRFOLDER, 16) = "" Then
        MsgBox "Der Ordner " & STRFOLDER & " wurde nicht gefunden!", vbExclamation
        Exit Sub
    End If

    Application.ScreenUpdating = False
    Set objShell = CreateObject("Shell.Application")
    Set objFolder = objShell.Namespace(STRFOLDER)
    spalte = 1

    For x = 0 To 33
        arrHeaders(x) = objFolder.GetDetailsOf(varName, x)
        Cells(1, spalte + x) = arrHeaders(x)
    Next

    Rows(1).Font.Bold = True
    zeile = 2

    For Each varName In objFolder.Items
        For x = 0 To 33
            Cells(zeile, spalte + x) = objFolder.GetDetailsOf(varName, x)
        Next
        zeile = zeile + 1
    Next

    Columns.AutoFit
    Application.ScreenUpdating = True
End Sub

Um auch die Dateieigenschaften von Unterordnern auszulesen, kannst du den Code wie folgt anpassen:

Private Sub GetDateieigenschaften()
    Dim varName
    On Error GoTo Fehler

    For Each varName In objFolder.Items
        Select Case objFolder.GetDetailsOf(varName, 2) ' Elementtyp
            Case "Dateiordner", "Folder"
                ' Dateiordner nicht listen
            Case Else
                spalte = 0
                For x = 0 To 33
                    spalte = spalte + 1
                    Cells(zeile, spalte) = objFolder.GetDetailsOf(varName, x)
                Next
                spalte = spalte + 1
                Cells(zeile, spalte) = objFolder.Self.Path
                zeile = zeile + 1
        End Select
    Next

    Set FO = FSO.GetFolder(objFolder.Self.Path)
    For Each FU In FO.Subfolders
        Set objFolder = objShell.Namespace(FU.Path)
        Call GetDateieigenschaften
    Next

Fehler:
    ' Fehlerbehandlung hier
End Sub

Häufige Fehler und Lösungen

  • Fehler: Ordner nicht gefunden

    • Lösung: Stelle sicher, dass der Pfad in STRFOLDER korrekt angegeben ist und der Ordner existiert.
  • Fehler: Laufzeitfehler bei Unterordnern

    • Lösung: Überprüfe die Berechtigungen für den Zugriff auf die Unterordner und passe die Fehlerbehandlung im Code an.

Alternative Methoden

Eine alternative Methode zum Auslesen von Dateieigenschaften ist die Verwendung des FileSystemObject. Mit FileSystemObject kannst du die Eigenschaften von Dateien direkt abfragen, was die Ausführung beschleunigen kann:

Dim FSO As Object
Set FSO = CreateObject("Scripting.FileSystemObject")
Dim Datei As Object
Set Datei = FSO.GetFile("C:\Pfad\Zur\Datei.txt")
MsgBox Datei.DateCreated

Praktische Beispiele

Hier sind einige nützliche Beispiele für das Auslesen spezifischer Dateieigenschaften:

  • Erstellungsdatum einer Datei:

    MsgBox Datei.DateCreated
  • Letzte Änderung einer Datei:

    MsgBox Datei.DateLastModified
  • Dateigröße:

    MsgBox Datei.Size

Diese Eigenschaften können leicht in den obigen Code integriert werden, um eine detaillierte Übersicht über die Dateien zu erhalten.


Tipps für Profis

  • Verwende Option Explicit: Dies hilft, mögliche Fehler bei der Variablenbenennung zu vermeiden.
  • Optimierung durch Arrays: Wenn du eine große Anzahl von Dateien ausliest, kann es hilfreich sein, die Ergebnisse zuerst in einem Array zwischenzuspeichern und dann in die Zellen zu schreiben.
  • Fehlerbehandlung: Implementiere eine robuste Fehlerbehandlung, um sicherzustellen, dass das Makro auch bei unerwarteten Problemen weiterläuft.

FAQ: Häufige Fragen

1. Kann ich den Code für andere Ordner verwenden?
Ja, passe einfach den Pfad in der Konstante STRFOLDER an.

2. Wie kann ich die Anzahl der ausgelesenen Dateieigenschaften anpassen?
Die Anzahl der Eigenschaften wird durch die Schleife im Code bestimmt. Du kannst den Wert in der Schleife anpassen, um mehr oder weniger Eigenschaften auszulesen.

3. Funktioniert dieser Code in Excel 365?
Ja, der Code sollte in Excel 365 sowie in den vorherigen Versionen von Excel funktionieren, solange VBA unterstützt wird.

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Entdecke mehr
Finde genau, was du suchst

Die erweiterte Suchfunktion hilft dir, gezielt die besten Antworten zu finden

Suche nach den besten Antworten
Unsere beliebtesten Threads

Entdecke unsere meistgeklickten Beiträge in der Google Suche

Top 100 Threads jetzt ansehen
Anzeige