Aufnahmedatum von JPG-Dateien mit .getdetailsof in Excel VBA extrahieren
Schritt-für-Schritt-Anleitung
-
Vorbereitung: Stelle sicher, dass du Excel VBA verwendest, um die .getdetailsof-Methode zu implementieren. Diese Methode ist Teil der Shell-Anwendung und kann nicht direkt auf das FileSystemObject angewendet werden.
-
Code einfügen: Öffne den VBA-Editor (Alt + F11) und füge den folgenden Code in ein neues Modul ein:
Public Sub MWDateienMitUnterordnernAuslesen()
Dim sRootPath As String
sRootPath = Range("Dateipfad").Value
Call ReadSubFolder(sRootPath)
MsgBox "Done"
End Sub
Private Sub ReadSubFolder(ByVal sPath As String)
Dim oShell As Object
Dim oFSO As Object
Dim oFolder As Object
Dim oSubFolder As Object
Dim oFile As Object
Dim sAufnahmedatum As String
Set oShell = CreateObject("Shell.Application")
Set oFSO = CreateObject("Scripting.FileSystemObject")
Set oFolder = oFSO.GetFolder(sPath)
For Each oSubFolder In oFolder.SubFolders
For Each oFile In oSubFolder.Files
sAufnahmedatum = oShell.Namespace(oSubFolder.Path).GetDetailsOf(oShell.Namespace(oSubFolder.Path).ParseName(oFile.Name), 12)
Debug.Print "Aufnahmedatum: " & sAufnahmedatum
Next oFile
Call ReadSubFolder(oSubFolder.Path)
Next oSubFolder
End Sub
-
Anpassen des Pfades: Stelle sicher, dass der sRootPath korrekt auf den Ordner zeigt, den du durchsuchen möchtest.
-
Ausführen: Führe die MWDateienMitUnterordnernAuslesen-Subroutine aus, um die Aufnahmedaten der JPG-Dateien zu extrahieren.
Häufige Fehler und Lösungen
-
Fehler: "Objekt oder Methode nicht unterstützt"
Lösung: Überprüfe, ob du die .getdetailsof-Methode auf das richtige Objekt anwendest. Sie sollte auf das Namespace-Objekt der Shell angewendet werden, nicht auf das FileSystemObject.
-
Fehler: Aufnahmedatum wird nicht angezeigt
Lösung: Stelle sicher, dass das richtige Feld (Position 12) für das Aufnahmedatum verwendet wird. Überprüfe auch, ob die Dateien tatsächlich die benötigten Metadaten enthalten.
Alternative Methoden
Eine alternative Methode besteht darin, die GetFileDetails-Funktion zu verwenden, um gezielt Informationen aus den Metadaten einer Datei zu extrahieren. Hier ist ein Beispiel, wie du diese Funktion implementieren kannst:
Function GetFileDetails(sPath As String, sFile As String) As String
Dim oShell As Object
Set oShell = CreateObject("Shell.Application")
Dim oFile As Object
Set oFile = oShell.Namespace(sPath).ParseName(sFile)
GetFileDetails = oShell.Namespace(sPath).GetDetailsOf(oFile, 12)
End Function
Diese Funktion kann dann in deinem Hauptcode aufgerufen werden, um das Aufnahmedatum zurückzugeben.
Praktische Beispiele
Hier ist ein Beispiel, wie du die GetFileDetails-Funktion in deinem Code verwenden kannst:
Dim aufnahmedatum As String
aufnahmedatum = GetFileDetails(oSubFolder.Path, oFile.Name)
Debug.Print "Aufnahmedatum: " & aufnahmedatum
Tipps für Profis
-
Nutze Debug.Print: Verwende Debug.Print, um die Ergebnisse während der Ausführung in das Direktfenster auszugeben. Dies hilft dir, den Ablauf und die Werte zu überwachen.
-
Fehlerbehandlung: Implementiere eine Fehlerbehandlung, um unerwartete Fehler zu erfassen und zu behandeln, z. B. durch Verwendung von On Error Resume Next.
-
Metadaten überprüfen: Achte darauf, dass die JPG-Dateien die notwendigen EXIF-Daten enthalten, andernfalls kann das Aufnahmedatum möglicherweise nicht extrahiert werden.
FAQ: Häufige Fragen
1. Warum kann ich die getdetailsof-Methode nicht verwenden?
Die Methode .getdetailsof gehört zum Shell-Objekt, nicht zum FileSystemObject. Stelle sicher, dass du das richtige Objekt verwendest.
2. Was mache ich, wenn das Aufnahmedatum fehlt?
Nicht alle JPG-Dateien enthalten EXIF-Daten. Überprüfe die Datei mit einem Metadaten-Viewer, um sicherzustellen, dass die Daten vorhanden sind.
3. Welche Excel-Version benötige ich?
Der Code sollte in Excel 2007 und späteren Versionen funktionieren, solange VBA unterstützt wird.