• Zapisz się do newslettera, aby otrzymywać powiadomienia o nowościach na blogu
    Zapisując się, wyrażasz zgodę na przesyłanie Ci informacji o nowościach na tym blogu. Zgodę możesz w każdej chwili wycofać (szczegóły).

Zapisz plik jako PDF z dzisiejszą datą w nazwie (VBA)

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.

Wynik

Wynik

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

I jeszcze wersja wideo:

Enjoy!

Spodobał Ci się ten artykuł?

Jeśli TAK, zapisz się na newsletter, aby otrzymywać powiadomienia
o o nowościach na blogu.

Zapisując się, wyrażasz zgodę na przesyłanie Ci informacji o nowościach na tym blogu. Zgodę możesz w każdej chwili wycofać (szczegóły).

Tagi , , , , , , , , , , , , , , .Dodaj do zakładek Link.

4 odpowiedzi na „Zapisz plik jako PDF z dzisiejszą datą w nazwie (VBA)

  1. jesiol mówi:

    W sytuacji gdy chcemy dla jednego klienta zrobić klika ofert, niestety pojawia się problem gdyż plik utworzony dzisiejszego dnia zawsze zastępuje poprzedni. Musimy zmieniać nazwy plików ręcznie. Czy jest możliwość dodawania numeru do pliku w przypadku gdy plik o takiej nazwie już istnieje w folderze?

    • Malina mówi:

      Hmmmm, może łatwiej będzie po prostu zamiast tylko dzisiejszej daty dołożyć też godzinę. Wtedy zamiast Date trzeba byłoby użyć Now, a format zastosować np. taki: yyyymmdd_hhmmss.
      Może tak?

      • jesiol mówi:

        Dobry pomysł ale rozwiązałem to w innny sposób. Rozszerzyłem nazwę do 3 komórek.
        Teraz mam inny problem. W jaki sposób ustawić zapis pdf tylko określonych kolumn. Chciałbym ukryć kilka kolumn, które są w środku dokumentu dlatego ustawienie obszaru wydruku nie jest możliwe.

        • Malina mówi:

          Hej, może w takim razie niech makro jeszcze dodatkowo ukrywa te kolumny, których nie chcemy drukowąć? Wydaje mi się to najprostszym rozwiązaniem 🙂

Dodaj komentarz

Twój adres email nie zostanie opublikowany. Pola, których wypełnienie jest wymagane, są oznaczone symbolem *