Czyli trochę o tekstach i datach w VBA
Jakiś czas temu, w tym wpisie, opisywałam makro, które zapisywało plik Excela jako PDF w tym samym katalogu, co ten plik Excela. Samo zapisywanie jako PDF sztuką nie było – można to sobie nawet nagrać 😉 – jednak już określenie miejsca zapisu pliku stanowiło większe wyzwanie.
Dziś z kolei rozbuduję to makro tak, aby jeszcze zapisywało ów PDF z nazwą zawierającą dzisiejszą datę. Albo tylko miesiąc, jak kto woli – metoda będzie taka sama.
Poprzednie rozwiązanie (dokładnie opisałam je tutaj, łącznie z tworzeniem nowego modułu), które zapisywało plik w tym samym folderze, pod nazwą zawierającą nazwę klienta, wyglądało tak:
Sub MojPDF() Dim Sciezka As String, Klient As String Sciezka = ThisWorkbook.Path & "\" Klient = ActiveSheet.Range("Klient").Value If Klient = "" Then Klient = "Klient" ActiveSheet.ExportAsFixedFormat Type:=xlTypePDF, Filename:= _ Sciezka & Klient & ".pdf", _ Quality:=xlQualityStandard, _ IncludeDocProperties:=True, _ IgnorePrintAreas:=False, _ OpenAfterPublish:=True End Sub
Teraz tylko trochę je zmodyfikujemy. Modyfikacja będzie polegała na dodaniu zmiennej NazwaPliku, która będzie przechowywała ciąg tekstowy oznaczający nazwę pliku oczywiście. Użyję tej zmiennej po to, aby kod był bardziej czytelny. Linijka z deklaracjami zmiennych wygląda więc teraz tak:
Dim Sciezka As String, Klient As String, NazwaPliku As String
Następnie trzeba określić wartość nowej zmiennej, czyli ustalić, jak ma się nazywać plik. To, że nazywa się jak klient jest OK, więc zostawiam. Dodam natomiast dzisiejszą datę. Posłuży mi do tego funkcja Date. Jest to visualbasicowy odpowiednik excelowej funkcji DZIŚ.
Dodatkowo, żeby data została odpowiednio sformatowana (chcę, aby wyświetlony był najpierw rok, potem miesiąc a na końcu dzień, bez żadnych separatorów) – wrzucę ją do funkcji Format. I znów – jest to visualbasicowy odpowiednim excelowego TEKSTu. Ten fragment kodu wygląda tak:
NazwaPliku = Sciezka & Klient & Format(Date, "yyyymmdd") & ".pdf"
Drugim argumentem funkcji Format jest format naszej daty. Jeśli chcesz ją wyświetlić w jakiś inny sposób – tutaj jest miejsce na modyfikację. MOżesz np. wyświetlić tylko miesiąc i wtedy wpiszesz: “mm” itd.
Na koniec to już tylko podstawienie naszej nazwy do fragmentu generującego PDF. Całość kodu wygląda tak:
Sub MojPDF() Dim Sciezka As String, Klient As String, NazwaPliku As String Sciezka = ThisWorkbook.Path & "\" Klient = ActiveSheet.Range("Klient").Value If Klient = "" Then Klient = "Klient" NazwaPliku = Sciezka & Klient & Format(Date, "yyyymmdd") & ".pdf" ActiveSheet.ExportAsFixedFormat Type:=xlTypePDF, Filename:= _ NazwaPliku, _ Quality:=xlQualityStandard, _ IncludeDocProperties:=True, _ IgnorePrintAreas:=False, _ OpenAfterPublish:=True End Sub
Pamiętaj koniecznie, aby plik z tym makrem zapisać jako plik z obsługa makr, czyli xlsm lub xlsb.
I to tyle! Mam nadzieję, że przyda Ci się zaprezentowana rozwiązanie. Jeśli znasz kogoś, komu też może się przydać – mam do Ciebie gorącą prośbę: udostępnij proszę mu/jej ten wpis mailem, na Facebooku czy w Messengerze. Razem będziemy szerzyć excelową wiedzę i pokażemy, że nie taki Excel straszny ;).
I plik xlsm do pobrania (pamiętaj o włączeniu makr!):
MalinowyExcel VBA Zapisz plik jako PDF z dzisiejszą datą w nazwie dw.zip