Data utworzenia i modyfikacji pliku mogą być odczytane w VBA na kilka sposobów. Co ciekawe, dają one różne wyniki. Nie jest to jednak żaden błąd jak mogłoby się wydawać – wręcz przeciwnie – sposoby te wzajemnie się uzupełniają. Inaczej traktują moment utworzenia pliku, o czym przekonamy się analizując kilka funkcji VBA.
5 funkcji VBA
Rozważmy pięć funkcji VBA do odczytywania daty utworzenia i modyfikacji pliku.
1 2 3 4 5 |
Function CreatedByFileDateTime() As Date CreatedByFileDateTime = FileDateTime(ThisWorkbook.FullName) End Function |
1 2 3 4 5 |
Public Function CreatedByBookProperty() As Date CreatedByBookProperty = ThisWorkbook.BuiltinDocumentProperties("Creation Date") End Function |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
Public Function CreatedByFSO() As Date Dim fs As Object, f As Object Set fs = CreateObject("Scripting.FileSystemObject") Set f = fs.GetFile(ThisWorkbook.FullName) CreatedByFSO = f.DateCreated Set fs = Nothing Set f = Nothing End Function |
1 2 3 4 5 |
Public Function ModifiedByBookProperty() As Date ModifiedByBookProperty = ThisWorkbook.BuiltinDocumentProperties("Last Save Time") End Function |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
Public Function ModifiedByFSO() As Date Dim fs As Object, f As Object Set fs = CreateObject("Scripting.FileSystemObject") Set f = fs.GetFile(ThisWorkbook.FullName) ModifiedByFSO = f.DateLastModified Set fs = Nothing Set f = Nothing End Function |
Historia pliku
Aby lepiej unaocznić różnicę, opiszę taki przykład.
- Kilka miesięcy temu ściągnąłem plik Excela z internetu.
- Wczoraj wieczorem (czyli 12-marca 2021r.) postanowiłem skopiować ten plik na pulpit i zmienić mu nazwę. Wgrałem do niego wszystkie te funkcje, które wkleiłem powyżej.
- Teraz, kiedy piszę tą notkę (13-marca), kilka razy zapisałem zmiany w pliku, a także przeliczyłem jeszcze raz wszystkie formuły.
Screen z wynikami
Rezultaty tych funkcji są bardzo ciekawe, co pokazuje screen poniżej. Data utworzenia i modyfikacji pliku została odczytana na trzy różne sposoby.
Analiza wyników
Przeanalizujmy jakie wyniki zwracają poszczególne sposoby.
FileDateTime
Pierwsza funkcja CreatedByFileDateTime bazuje na wbudowanej funkcji VBA. Nie zwraca daty utworzenia pliku, lecz czas jego ostatniego zapisu.
Jak możemy wyczytać w helpie „In Excel, the FileDateTime function returns the date and time of when a file was created or last modified”.
BuiltinDocumentProperties(„Creation Date”)
Druga funkcja CreatedByBookProperty bazuje na wbudowanych właściwościach skoroszytu. Daje bardzo ciekawy wynik – 25 stycznia 2016r….
Ta dziwna data to rzeczywisty czas utworzenia oryginalnego pliku, który pobrałem z internetu. Jakiekolwiek modyfikacje pliku (zmiana nazwy, przeniesienie na inny dysk, wysłanie e-mailem) nie wpływają na zmianę tej wartości.
GetFile.DateCreated
Trzecia funkcja CreatedByFSO korzysta z zewnętrznej biblioteki Scripting.FileSystemObject i jako datę pokazuje wczorajszy wieczór, czyli moment skopiowania pliku na pulpit. Jest to równoznaczne z utworzeniem nowego pliku na dysku.
BuiltinDocumentProperties(„Last Save Time”)
Czwarta funkcja ModifiedByBookProperty pokazuje datę ostatniego zapisu pliku. Co ciekawe skopiowanie pliku w inne miejsce nie zmienia tej wartości – liczy się rzeczywisty ostatni czas zapisu.
GetFile.DateLastModified
Ostatnia funkcja ModifiedByFSO rejestruje wszelkie modyfikacje związane z plikiem.