W każdej aplikacji mam makro, które automatyzuje mi tworzenie backupu. Kopię pliku zapisuję na swoim dysku jak i w chmurze. Ten backup tworzy się w tle – nie przeszkadza zatem w pracy. W nazwie pliku zawarta jest data i czas zapisu – możemy więc bez problemu przywrócić jego starszą wersję. Makro podpinam pod skrót klawiaturowy. Całe rozwiązanie jest bardzo praktyczne i wygodne.
Kopia przy Ctrl+S
Excel oferuje narzędzie autoodzyskiwania. Nie mamy jednak możliwości utworzenia kopii zapasowej z nazwą pliku, datą i czasem zapisu. Od czego jednak mamy VBA?
Moją intencją było stworzenie mechanizmu, który działałby tak jak opisałem w zajawce. Dodatkowo, chciałbym aby makro tworzyło automatyczny backup w momencie zapisania zmian w pliku.
Bardzo ważne jest to, aby nazwa pliku zawierała dokładny czas zapisu. W takiej sytuacji mogę bowiem posortować pliki wg daty zapisu, a tym samym szybko wrócić do dowolnej wersji.
Kod makra
Kod realizujący to zadanie znajduje się poniżej. Powinien zostać umieszczony w module skoroszytu, a nie w zwykłym module makr. Odwołujemy się tutaj bowiem do procedury zdarzeniowej Workbook_BeforeSave.
1 2 3 4 5 6 7 8 9 10 |
Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean) Dim sSciezkaDoPliku As String 1 If SaveAsUI = False Then 'Zapis gdy user wybral "Zapisz", a nie "Zapisz jako" 2 sSciezkaDoPliku = Me.Path & "\Backup\" & _ Format(Now, "yyyymmdd_hhmmss_", vbMonday) & Me.Name 3 Me.SaveCopyAs Filename:=sSciezkaDoPliku 4 End If End Sub |
Analiza makra
Najpierw sprawdzam czy użytkownik wybrał opcję Zapisz, a nie Zapisz jako…
Następnie definiuję ścieżkę do pliku, tak aby jego nazwa zaczynała się od roku, miesiąca, dnia, godziny, minuty i sekundy (format yyyymmdd_hhmmss_). W ten sposób będę mógł docelowo sortować pliki wg czasu zapisu.
Na samym końcu skorzystałem z metody SaveCopyAs. Pozwala ona na utworzenie kopii pliku w tle, bez ingerencji w plik główny.
Podsumowanie
W momencie zapisu zmian w pliku (Ctrl+S) makro tworzy tworzy kopię pliku w katalogu Backup.