Datei speicherzeit (systemzeit) ändern umschreiben

Bild

Betrifft: Datei speicherzeit (systemzeit) ändern umschreiben
von: chris b
Geschrieben am: 15.03.2005 19:18:17
Hallo VBA Profis,habe mal wieder eine frage und hoffe Ihr könnt mir helfen.
Es geht um eine "Dateizeit" also die zeit wann die Datei gespeichert wurde.
Ich habe ein pProgramm geschrieben das mir aus z.b einem Verzeichniss alle Exceldateien öffnet und in dieser Werte ändert.Jetzt mein "Problem" und zwar wenn ich die Datei öffnen lasse und wieder speichere, dann habe ich als Speicherdatum immer das aktuelle datum von heute. ich möchte aber erreichen das das Datum das in der Datei stand z.b "von 2 tagen davor" erhalten bleibt.
Habe schon versucht irgendwie damit was zu erreichen aber dazu fehlt mir das wissen.
Set f = CreateObject("Scripting.FileSystemObject").GetFile(Pfad & a)
x = f.DateLastModified
Ist es möglich z.b Bevor ich die Datei öffne kann ich ja in Variable x das akuelle Datum der Datei schreiben (beispiel oben)und dann bevor ich die Datei vom Programm speichern lasse das es mir die systemzeit umstellt in das Datum das in Variable x steht? Also ich hoffe ich habe es einigermaßen verständlich erklärt und ihr könnt mir helfen.
Vielen dank gruß Christian

Bild

Betrifft: AW: Datei speicherzeit (systemzeit) ändern umschreiben
von: Nepumuk
Geschrieben am: 15.03.2005 19:41:30
Hallo Christian,
ich hoffe für dich, das du nichts illegales damit bezweckst.


Option Explicit
Private Declare Function GetFileTime Lib "kernel32" _
    (ByVal hFile As Long, lpCreationTime As FILETIME, _
    lpLastAccessTime As FILETIME, lpLastWriteTime As FILETIME) As Long
Private Declare Function SetFileTime Lib "kernel32" _
    (ByVal hFile As Long, lpCreationTime As FILETIME, _
    lpLastAccessTime As FILETIME, lpLastWriteTime As FILETIME) As Long
Private Declare Function CreateFile Lib "kernel32" Alias "CreateFileA" _
    (ByVal lpFileName As StringByVal dwDesiredAccess As Long, _
    ByVal dwShareMode As Long, lpSecurityAttributes As Long, _
    ByVal dwCreationDisposition As LongByVal dwFlagsAndAttributes As Long, _
    ByVal hTemplateFile As LongAs Long
Private Declare Function SystemTimeToFileTime Lib "kernel32" _
    (lpSystemTime As SYSTEMTIME, lpFileTime As FILETIME) As Long
Private Declare Function LocalFileTimeToFileTime Lib "kernel32" _
    (lpLocalFileTime As FILETIME, lpFileTime As FILETIME) As Long
Private Declare Function CloseHandle Lib "kernel32" (ByVal hObject As LongAs Long
Private Type FILETIME
    dwLowDateTime As Long
    dwHighDateTime As Long
End Type
Private Type SYSTEMTIME
    wYear As Integer
    wMonth As Integer
    wDayOfWeek As Integer
    wDay As Integer
    wHour As Integer
    wMinute As Integer
    wSecond As Integer
    wMilliseconds As Integer
End Type
Private Const GENERIC_WRITE = &H40000000
Private Const OPEN_EXISTING = 3
Private Const FILE_SHARE_READ = &H1
Private Const FILE_SHARE_WRITE = &H2
Public Sub Aenderungdatum_aendern()
    Dim Ft1 As FILETIME, Ft2 As FILETIME, lngHandle As Long
    Dim udtFileTime As FILETIME, udtLocalTime As FILETIME, udtSystemTime As SYSTEMTIME
    udtSystemTime.wYear = Year(Now)
    udtSystemTime.wMonth = Month(Now)
    udtSystemTime.wDay = Day(Now - 2) 'zwei Tage zurück
    udtSystemTime.wDayOfWeek = Weekday(Now)
    udtSystemTime.wHour = Hour(Now)
    udtSystemTime.wMinute = Minute(Now)
    udtSystemTime.wSecond = Second(Now)
    udtSystemTime.wMilliseconds = 0
    SystemTimeToFileTime udtSystemTime, udtLocalTime
    LocalFileTimeToFileTime udtLocalTime, udtFileTime
    lngHandle = CreateFile("D:\Eigene Dateien\AEG\Test.xls", GENERIC_WRITE, _
        FILE_SHARE_READ Or FILE_SHARE_WRITE, ByVal 0&, OPEN_EXISTING, 0, 0)
    GetFileTime lngHandle, Ft1, Ft1, Ft2
    SetFileTime lngHandle, Ft1, Ft1, udtFileTime
    CloseHandle lngHandle
End Sub


Gruß
Nepumuk
Bild

Betrifft: AW: Datei speicherzeit (systemzeit) ändern umschreiben
von: chris b
Geschrieben am: 16.03.2005 07:12:27
Hallo Nepumuk,
nein habe nichts schlimmes vor damit.Wüsste auch nicht was ?
Ist nur aus dem grund weil der Freund der das braucht nach der aktion mit dem umschreiben der daten die dateien auch noch nach änderungsdatum sortieren will.
Nur deshalb, vielen Dank werds gleich mal testen !!!
Vielen dank
grüße Chris
Bild

Betrifft: AW: doch noch eine frage
von: chris b
Geschrieben am: 16.03.2005 07:31:00
Hallo Nepumuk,
also dein code funktioniert klasse so wie ich in auch verwenden kann.
Nur eine Bitte hätte ich.
Würdest du in mir kurz erklären also wie du zu den Befehlen kommst udnso also was die machen.
Vielen Dank wen du dir noch einmal die Zeit nimmst gruß Christain
Bild

Betrifft: AW: doch noch eine frage
von: Nepumuk
Geschrieben am: 16.03.2005 11:19:08
Hallo Christian,
SystemTimeToFileTime konvertiert das Datum/Uhrzeit - Format in das Filetimeformat.
LocalFileTimeToFileTime konvertiert das Filetimeformat in das Coordinated Universal Time (UTC) - Format (Soll ja auch in China richtig angezeigt werden).
CreateFile öffnet (durch dem Parameter OPEN_EXISTING) die Datei und gibt eine Zugriffsnummer (lngHandle) zurück.
GetFileTime liest die Daten Erstellt / Geändert / Letzter Zugriff aus.
SetFileTime schreibt die Daten wieder zurück.
CloseHandle schließt die Datei wieder.
Wie ich zu den Befehlen komme? Genauso wie zu den Befehlen in VBA. Allerdings muss ich da öffters nachsehen, weil sie doch meistens etwas komplexer sind wie die VBA - Befehle.
Gruß
Nepumuk
 Bild

Beiträge aus den Excel-Beispielen zum Thema "voreinstellungen fuer diagram"