Neuigkeiten:

Ist euer Problem gelöst, dann bitte den Knopf "Thema gelöst" drücken!

Mobiles Hauptmenü

Dateidatum per VBA ändern

Begonnen von Gockel67, Mai 30, 2026, 12:08:42

⏪ vorheriges - nächstes ⏩

Gockel67

Moin Gemeinde,

folgende Problemstellung.
Beim Umkopieren von Dateien soll das Originaldatum beibehalten werden.
Da meine Kenntnisse dafür nicht ausreichen habe ich mir aus dem Internet eine Routine geladen die nach dem kopieren der Datei das Datum der Zieldatei umschreibt.

Leider scheint diese Routine nicht 100% zu funktionieren. Manche Daten werden falsch geschrieben.
Beispiel:
Aus dem 01.01.2026 wird der 31.12.2025
Aus dem 01.03.2026 wird der 28.02.2026
Der Februar funktioniert überhaupt nicht. Es fehlt jedes mal ein Tag. Aus dem 15. wird der 14. usw.

Zum Testen hab ich mir eine kleine Routine gemacht anhand derer man das ganze nachvollziehen kann.

Könnte mal jemand bitte da drauf schauen? Füge ich im Anhang bei.
Als Test kann jede beliebige Datei verwendet werden. Es muss in meinem Programm dann nur der Pfad angepasst werden.
Oder hat zufällig jemand eine Routine die zuverlässig arbeitet?

Wünsche allen ein schönes Wochenende
Jörg

Debus

#1
Versuch mal so in etwas
Dim OriginalDatum As Date
Dim ZielDatei As Object

OriginalDatum = Datei.DateLastModified

fso.CopyFile Datei.Path, Ziel & "\" & Datei.Name, True

Set ZielDatei = fso.GetFile(Ziel & "\" & Datei.Name)

ZielDatei.DateLastModified = OriginalDatum

Das passt zu Deinem alten Code, ist schon was länger her

Gruß
Holger

Gockel67

Danke Holger, werde ich morgen ausprobieren.

Knobbi38

Hallo Jörg,
ZitatBeim Umkopieren von Dateien soll das Originaldatum beibehalten werden.
Was genau meinst du damit? Es gibt 3 Daten: Created, LastAccessed, LastModified. Alle verhalten sich wie erwartet und werden nicht einfach willkürlich beim kopieren geändert. Insbesondere LastModified wird beim Kopieren nicht verändert, deshalb ist der Code aus #1 so auch erstmal etwas sinnfrei.

Knobbi38

 

Debus

Hallo Ulli,

so ein bisschen passt das alles zu dem Thread von Jörg hier

Da gabe es schon einiges dazu. Er hat da schon was fertiges so ansatzweise, welches nur angepasst umgearbeitet werden müsste, wenn ich mich richtig erinnere




Gruß
Holger


Knobbi38

Hallo Holger,

ja kann sein, aber dann sollte Jörg genauer beschreiben, um was es geht. Wie gesagt, dass letzte Änderungsdatum kann er wohl nicht meinen, dass ändert sich beim kopieren eben gerade nicht.

Gruß
Ulrich

Gockel67

Hallo Holger, Hallo Knobbi,

ich muss wohl weiter ausholen.
Ich kopiere Dateien von meinem Rechner auf ein Webdav-Laufwerk das als W: im Dateiexplorer eingebunden ist.
Dabei werden sowohl das Erstelldatum als auch das Änderungsdatum auf den heutigen Tag gesetzt.
Ich wollte eigentlich erreichen das die beiden Datumangaben erhalten bleiben. Zumindest das Erstelldatum wäre wichtig.
Interessanterweise tritt dieser Effekt nicht auf wenn ich die Datein von z.B. C: auf D: innerhalb des gleichen Computers kopiere.

Ich glaub ich lass das einfach fallen. Holger hat sich schon damit gestern beschäftigt aber das Ergebnis ist immer noch das selbe.

Wünsche allenn eine gute Woche
Jörg

Knobbi38

Das hättest du auch früher sagen können. Das Problem ist hinreichend bekannt tritt je nach WebDAV-Client mehr oder weniger auf. Es kann sich z.B im Explorer ändern, im Browser aber möglicherweise nicht. Entweder eine andere Software ausprobieren oder aber vor dem Kopieren die Datei in eine Zip-Datei packen. Dann bleiben die Metadaten erhalten.

Knobbi38

PS:
Vielleicht kannst du auch auf eine anderes Protokoll wie SSH oder SFTP wechseln. Je nach WebDAV Anbieter könnte das damit funktionieren.
 

Gockel67

Hallo Knobbi,

sorry. Wusste nicht das Webdav damit was zu tun hat.
Ich hab ja wie in #1 beschrieben eine Routine gefunden die das Datum entsprechend setzt.
Warum diese allerdings im Januar und Februar um minus einen Tag versetzt arbeitet ist mir schleierhaft.
Ich dachte die könnte man irgendwie anpassen.

Liebe Grüße
Jörg

Knobbi38

Hallo Jörg,

bei deiner Testroutine fängt es schon mit der API-Deklaration für die API-Funktionen an. Diese ist schlichtweg falsch, der Else-Fall passt gar nicht. Nutzt du noch VBA6?

Dann ist die Testroutine für diesen Test nicht gut geeignet. Vor dem Kopiervorgang müssten die Metadaten der zu kopierenden Datei ausgelesen und nach dem Kopiervorgang wieder gesetzt werden. Da die Metadaten immer in UTC-Zeiten kodiert sind, sollte eine Konvertierung eigentlich nicht notwendig sein. Man müsste die ursprünglichen Zeiten einfach nur neu setzen.  Bitte nicht mit den Zeiten verwechseln, die im Explorer angezeigt werden – das sind lokale Zeiten!

Ich habe mir von der KI einen Rohentwurf als Ausgangspunkt generieren lassen. Da dabei jedoch noch so viele Fehler auftreten, möchte ich das hier nicht ungeprüft weitergeben. Ein passendes Beispiel wird also noch etwas dauern.

Wie kopierst du eigentlich deine Dateien auf die WebDAV Freigabe? Per VBA, einem Tool oder ...? Access 32- oder 64-Bit?

Knobbi38


 

Gockel67

Hallo Knobbi,

das Beispiel war auch von einer KI.
Ich verwende Access 2024 und den filecopy Befehl.
64 bit.
Liebe Grüße
Jörg

Knobbi38

FileCopy? Hast du die Freigabe als Laufwerk eingebunden? Dann verstehe ich noch nicht, warum das Beispiel von Holger nicht das gewünschte Ergebnis bringt.

Knobbi38

Debus

Hallo Jörg, hallo Ulli

ich habe da mal was nachgelesen und da müsste Jörg dann auch noch was zu sagen bezüglich WebDav

Gruß
Holger



1. WebDAV als Laufwerksbuchstabe gemappt D:\
Ja, funktioniert. SetFileTime API arbeitet mit normalen Dateihandles. Windows kümmert sich um die WebDAV-Übersetzung. Erstelldatum, Änderung, Zugriff werden 1:1 gesetzt. Teste ich hier regelmäßig.

2. WebDAV über UNC-Pfad \\server@SSL\DavWWWRoot\
Geht auch, solange Windows den Pfad auflösen kann. CreateFile akzeptiert UNC. Performance ist aber mies, weil jede Datei 3x angefasst wird: Kopieren + Zeit lesen + Zeit setzen.

3. WebDAV-Server unterstützt es nicht
Manche Billig-NAS oder OwnCloud/Nextcloud in Standardconfig ignorieren SetFileTime komplett. Datei wird kopiert, Datum bleibt "jetzt". Kein Fehler, aber Datum falsch.

Gockel67

#13
Hallo Holger,

nach verschiedenen Tests vermute ich Punkt 3. Egal was ich mache. Es wird immer das aktuelle Datum gesetzt.
Damit hat sich das ganze dann auch erledigt.

Liebe Grüße
Jörg

P.S. Trotzdem nochmal ein Nachtrag: Es funktioniert ja auch auf lokalen Dateien nicht richtig. Also zumindest auf meinem Rechner.
Januar und Februar sind jeweils um -1 Tag verschoben.