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

VBA Format Aufnahmedatum mit WIA.ImageFile

Forumthread: VBA Format Aufnahmedatum mit WIA.ImageFile

VBA Format Aufnahmedatum mit WIA.ImageFile
04.02.2025 08:45:10
Joschi Witchcraft
Hallo Forum.

Bisher hatte ich das Aufnahmedatum eines Bildes (JGP) mit Hilfe eines im Internet gefundenen Codes "mühsam" ermittelt. Zufällig habe ich nun im Internet eine Lösung mit WIA.ImageFile gefunden. Das Datum erhält man über das Objekt mit dem Namen "ExifDTDigitized". Diese Lösung gefällt mir.

Problem: Das Datum wird in folgender Form bereitgestellt: 2019:10:25 17:51:11
Dieses Format ist mit CDATE() nicht verträglich (Laufzeitfehler 13) und muss zuvor "umgebaut" werden.

Datum = Mid(objProp.Value, 9, 2) & "." & _
Mid(objProp.Value, 6, 2) & "." & _
Mid(objProp.Value, 1, 4) & Mid(objProp.Value, 11, 9)

Gibt es eine bessere Lösung?

Zusatzfrage:
Bisher loope ich mich durch die Properties, bis ich den passenden Eintrag gefunden habe. Gibt es auch eine Direktabfrage mit den von mir oben genannten Namen?

For Each objProp In objImage.Properties
If objProp.Name = "ExifDTDigitized" Then
......
Exit for
End If
Next objProp

Alle Doppelpunkte durch einen Punkt zu ersetzen funktioniert auch nicht: CDate mag das ebenfalls nicht (Laufzeitfehler 13).

Man kann das Aufnahmedatum auch über "Shell.Application" und ".GetDetailsOf(FileName, 12)" ermitteln. Allerdings ohne die Sekunden.

Gruß Joschi
Anzeige

8
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: VBA Format Aufnahmedatum mit WIA.ImageFile
04.02.2025 09:12:25
Onur
Poste bitte mal den ganzen Code oder besser die Datei - Ein paar aus dem Zusammenhang gerissene Codefetzen bringen nicht viel.
Du kannst ohne Schleife...
04.02.2025 09:26:40
Case
Moin, :-)

... so darauf zugreifen (getestet): ;-)
Debug.Print objImage.Properties("ExifDTDigitized").Value

Servus
Case
Anzeige
Und wegen dem Format...
04.02.2025 09:34:04
Case
Moin, :-)

... machst du das (auch getestet): ;-)
Debug.Print CDate(Replace(objImage.Properties("ExifDTDigitized").Value, ":", ".", 1, 2))

Servus
Case
AW: Und wegen dem Format...
04.02.2025 10:30:03
Joschi Witchcraft
Hallo Case.

Herzlichen Dank für Deine Antwort.

Ich hatte schon einmal gelesen, dass man bei "Replace" auch einen Count angeben kann. Doch daran hatte ich nicht gedacht. Es ist mein erster Code mit díeser Option. Und er funktioniert.

Danke auch für den Hinweis, mit "objImage.Properties("ExifDTDigitized").Value" direkt auf das Datum zuzugreifen.

Meine Frage, was passiert, wenn die File kein Aufnahmedatum hat, wurde dadurch beantwortet, dass ich testweise "on Error Resume Next" entfernt hatte.
Das "On Error" habe ich jetzt auf "On Error GoTo FuncExit" geändert. Und den entsprechenden Return-Code vor den kritischen Befehlen gesetzt,

Mein Code ist jetzt wesentlich kleiner geworden:

Function WIAExifDate(ByVal WIAFile As String) As String
Const WIARC1 As Integer = -1 ' CreateObject fehlgeschlagen
Const WIARC2 As Integer = -2 ' Loadfile fehlgeschlagen
Const WIARC3 As Integer = -3 ' Kein Aufnahmedatum
Dim objImage As Object
Dim objProp As Object
On Error GoTo FuncExit
WIAExifDate = WIARC1
Set objImage = CreateObject("WIA.ImageFile")
WIAExifDate = WIARC2
Call objImage.LoadFile(WIAFile)
WIAExifDate = WIARC3
WIAExifDate = Replace(objImage.Properties("ExifDTDigitized").Value, ":", ".", 1, 2)
FuncExit:
End Function

Danke für die Unterstützung. Wieder ein Problem weniger.

Gruß Joschi
Anzeige
Gerne. :-)
04.02.2025 10:39:44
Case
AW: Und wegen dem Format...
04.02.2025 12:43:21
volti
Hallo Joschi,

zwar schon gelöst, aber hier noch eine Variante...

Code:


Function Aufnahmedatum(sDatei As String) As Variant ' Function gibt das Aufnahmedatum des Fotos zurück On Error Resume Next With CreateObject("WIA.ImageFile") .LoadFile (sDatei) If Err.Number <> 0 Then Aufnahmedatum = "Die Datei" & vbLf & sDatei & vbLf _ & "wurde nicht gefunden!" Else Aufnahmedatum = "Kein Aufnahmedatum vorhanden!" Aufnahmedatum = CDate(Replace(.Properties("ExifDTDigitized").Value, ":", "/", 1, 2)) End If End With End Function

_________________________
viele Grüße aus Freigericht 😊
Karl-Heinz
Anzeige
AW: VBA Format Aufnahmedatum mit WIA.ImageFile
04.02.2025 09:25:41
Joschi Witchcraft
Hallo Onur.

Hier ist der Code:

Function WIAExifDate(ByVal WIAFile As String) As String
Const WIARC1 As Integer = -1 ' CreateObject fehlgeschlagen
Const WIARC2 As Integer = -2 ' Loadfile fehlgeschlagen
Const WIARC3 As Integer = -3 ' Kein Aufnahmedatum
Dim objImage As Object
Dim objProp As Object
On Error Resume Next
Set objImage = CreateObject("WIA.ImageFile")
If CBool(Err.Number) Then
WIAExifDate = WIARC1
GoTo FuncExit
End If
Call objImage.LoadFile(WIAFile)
If CBool(Err.Number) Then
WIAExifDate = WIARC2
GoTo FuncExit
End If
WIAExifDate = WIARC3
For Each objProp In objImage.Properties
If objProp.Name = "ExifDTDigitized" Then
If InStr(objProp.Value, ":") = 5 Then ' Format: jjjj:mm:tt SS.MM.SS
WIAExifDate = Mid(objProp.Value, 9, 2) & "." & _
Mid(objProp.Value, 6, 2) & "." & _
Mid(objProp.Value, 1, 4) & Mid(objProp.Value, 11, 9)
Else
WIAExifDate = objProp.Value
End If
GoTo FuncExit
End If
Next objProp
FuncExit:
End Function

Gruß Joschi
Anzeige
AW: VBA Format Aufnahmedatum mit WIA.ImageFile
04.02.2025 09:32:57
Onur
Reichen deine Kenntnisse dafür aus?
Ich würde den Zeitstempel erstmal am Leerzeichen trennen.
Den linken Teil (das falsche Datum würde ich mittels der Split-Funktion (Trennzeichen ":") in drei Teile splitten.
Dann würde ich sie richtig sortiert wieder (wiederum mit Tennzeichen ":") neu verketten und dann wieder zum Zeitstempel zusammenfügen.
Wenn du es nicht hinbekommst, dann bitte mal die Datei posten, damit ich auch testen kann.
Anzeige
Anzeige
Anzeige
Live-Forum - Die aktuellen Beiträge
Datum
Titel
14.05.2026 13:31:09
14.05.2026 09:50:42
13.05.2026 19:14:18