AW: Änderung
25.04.2023 18:20:08
Yal
Hallo Rosel,
es ist mal so, dass diese Details nicht für alle Dateityp vorhanden sind. Frame height macht nur bei Video sinn.
unter https://dot-sharp.com/en/net-getdetailsof-en/
findest Du eine detailierte Liste der Eigenschaften. Es ist übrigens 293 & 295 und nicht 283 & 285. Wer gut googeln kann (und auch Englisch), ist nartürlich in Vorteil.
Dieser Code funktioniert bei mir:
'unter Anbindung von "Microsoft Scripting Runtime" ("Extras", "Verweise...", einhaken)
'Start der Routine: OVBAde_DateienMitUnterordnernAuslesen
Private oSheet As Worksheet
Private oFSO As FileSystemObject
Public Sub OVBAde_DateienMitUnterordnernAuslesen()
Const sRootPath As String = "C:\TEST" 'Pfad bitte anpassen ohne Trennzeichen am Ende!!!
Set oFSO = New FileSystemObject
Set oSheet = Sheets.Add
With oSheet.Range("A1:G1")
.Value = Array("Pfad", "Datum", "Dateiname", "Grösse", "Länge", "Fr_Höhe", "Fr_breite")
.Interior.ColorIndex = 11
.Font.Color = vbWhite
.Font.Bold = True
End With
OVBAde_ReadSubFolder oFSO.GetFolder(sRootPath)
End Sub
Private Sub OVBAde_ReadSubFolder(oFolder As Folder)
Dim oSubFolder As Folder
Dim oFile As Scripting.File
Dim Details
'Alle Dateien auflisten
For Each oFile In oFolder.Files
With oSheet.Cells(Rows.Count, 1).End(xlUp)
.Offset(1, 0) = oFolder.Path
.Offset(1, 1) = oFile.DateLastModified
.Offset(1, 2) = oFile.Name 'wird, falls vorhanden, von Details überschrieben
.Offset(1, 3) = oFile.Size 'dito
Details = Array()
Details = Details_auslesen(oFile)
If IsArray(Details) Then .Offset(1, 2).Resize(1, 5) = Details
End With
Next
'Alle Unterverzeichnisse verarbeiten (rekursiv)
For Each oSubFolder In oFolder.subfolders
OVBAde_ReadSubFolder oSubFolder
Next oSubFolder
End Sub
Function Details_auslesen(Datei As File)
Dim ShApp As Object 'Shell-Objekt
Dim ShFolder As Object 'Folder-Objekt (nach Shell-App Muster, nicht nach FileSystemObject)
Dim ShFolderItem As Object 'Folder-Item, also Datei, nach Shell.GetItem
Dim Ergebnis(4) As String
Dim T
Const cExtListe = "mp4 mkv avi flv" 'Leerzeichen getrennt wg Split (Split splittet per Default auf Leerzeichen)
'keine Verarbeitung, wenn nicht in der Liste
If InStr(1, cExtListe, oFSO.GetExtensionName(Datei.Name)) = 0 Then Exit Function
Set ShApp = CreateObject("Shell.Application")
Set ShFolder = ShApp.Namespace(Datei.ParentFolder.Path)
Set ShFolderItem = ShFolder.ParseName(Datei.Name)
'Details on GetDetailsOf in https://dot-sharp.com/en/net-getdetailsof-en/
Ergebnis(0) = ShFolder.GetDetailsOf(ShFolderItem, 0) 'Name
Ergebnis(1) = ShFolder.GetDetailsOf(ShFolderItem, 1) 'Size
Ergebnis(2) = ShFolder.GetDetailsOf(ShFolderItem, 27) 'Length
Ergebnis(3) = ShFolder.GetDetailsOf(ShFolderItem, 293) 'Frame Height
Ergebnis(4) = ShFolder.GetDetailsOf(ShFolderItem, 295) 'Frame Width
Details_auslesen = Ergebnis
End Function
Yal