Zapisywanie pliku Excela z datą w nazwie pliku w VBA

Jak zapisać plik Excela z datą w nazwie pliku?

Zapisywanie Excela z datą w nazwie to nic trudnego:). W VBA Excel masz możliwość napisania krótkiego makra, które będzie zapisywało plik z dowolną częścią daty w nazwie przy każdorazowym uruchomienie makra. Pliki na twoim dysku będą wyglądać np w ten sposób:

  • Raport_sprzedaży_20170901.xlsx
  • Raport_sprzedaży_20170902.xlsx
  • Raport_sprzedaży_20170903.xlsx

W jaki sposób to zrobić? W jednym z rozdziałów mojego kursu excel VBA przedstawiłem szybki sposób na zapis pliku Excela przy użyciu makra zarówno w formacie xlsx jak i xlsm. Sam kod wygląda następująco:

Sub saveWorkbook()
Application.DisplayAlerts = False 'by program Excel nie pytał czy na pewno zapisać plik
'zapis do pliku .xlsm
ThisWorkbook.SaveAs Filename:="C:\KATALOG\NAZWA_PLIKU.xlsm", FileFormat:=xlOpenXMLWorkbookMacroEnabled, CreateBackup:=False
'zapis do pliku .xlsx
ThisWorkbook.SaveAs Filename:="C:\KATALOG\NAZWA_PLIKU.xlsx", FileFormat:=xlOpenXMLWorkbook, CreateBackup:=False
End Sub

Jedyne, co powinieneś zrobić, to dodać do naszych bloków kodu element bieżącej daty. Może to być dzień bieżący, dzień poprzedni, skrót tygodnia, miesiąca, roku itp. Przekształcenia daty dokonujemy przy pomocy funkcji Format(). Otwieramy Edytor Visual Basic w Excelu, a same makro zapisujące plik powinno wyglądać w następujący sposób:

Sub saveWorkbook()
Application.DisplayAlerts = False 'by program Excel nie pytał czy na pewno zapisać plik

'zapis do pliku .xlsm
ThisWorkbook.SaveAs Filename:="C:\KATALOG\NAZWA_PLIKU_" & Format(Date, "yyyymmdd") & ".xlsm", _
FileFormat:=xlOpenXMLWorkbookMacroEnabled, CreateBackup:=False


'zapis do pliku .xlsx
ThisWorkbook.SaveAs Filename:="C:\KATALOG\NAZWA_PLIKU_" & Format(Date, "yyyymmdd") & ".xlsx", _
FileFormat:=xlOpenXMLWorkbook, CreateBackup:=False
End Sub
VBA Excel - Zapisywanie pliku z datą w nazwie
VBA Excel – Zapisywanie pliku z datą w nazwie

Zapisywanie pliku z datą z dnia poprzedniego

Jeżeli chciałbyś zapisać plik z inną datą w nazwie, np datą z dnia poprzedniego, jedyne co powinniśmy zrobić to zmienić zapis daty na Date() – 1. Odejmujemy w ten sposób jeden dzień od daty bieżącej.

Format(Date - 1, "yyyymmdd")

Cały kod dla pliku xlsx i xlsm będzie wyglądał następująco:

Sub saveWorkbook()
Application.DisplayAlerts = False 'by program Excel nie pytał czy na pewno zapisać plik

'zapis do pliku .xlsm
ThisWorkbook.SaveAs Filename:="C:\KATALOG\NAZWA_PLIKU_" & Format(Date-1, "yyyymmdd") & ".xlsm", _
FileFormat:=xlOpenXMLWorkbookMacroEnabled, CreateBackup:=False


'zapis do pliku .xlsx
ThisWorkbook.SaveAs Filename:="C:\KATALOG\NAZWA_PLIKU_" & Format(Date-1, "yyyymmdd") & ".xlsx", _
FileFormat:=xlOpenXMLWorkbook, CreateBackup:=False
End Sub

Na koniec dodam, że samą funkcję format można przekształcić na wiele sposobów, by data otrzymała format np miesiąca „yyyymm„, roku „yyyy” lub też była zapisywana z separatorami „yyyy-mm-dd„. Poniżej zamieszczam plik z przykładem:

Zapisywanie_pliku_Excela_z_data_w_nazwie _pliku _w_VBA

Całość kursu VBA zamieszczam pod tym adresem: VBA

Dodaj komentarz

Twój adres e-mail nie zostanie opublikowany. Wymagane pola są oznaczone *

Komentarz do “Zapisywanie pliku Excela z datą w nazwie pliku w VBA”