fbpx

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

11.01.2019 | Analizy sprzedaży, ECP3, Makra 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 ;).

Chcesz nauczyć się pisać makra w Excelu?

A jeśli chcesz nauczyć się pisać makra od zera – koniecznie zapisz się na listę zainteresowanych moim kursem wprowadzającym do pisania makr Excel w codziennej pracy cz. 3.! Zapis jest bezpłatny, podobnie jak cotygodniowe artykuły, które lądują prosto na Twojego maila :).

 

 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!

Jeżeli chcesz lepiej poznać makra i VBA zapisz się na listę zainteresowanych kursem Excel w codziennej pracy cz. 3! Podczas oczekiwania na kurs będę Ci wysyłała informacje, ciekawostki i excelowe triki. Bezpłatnie! 

Pomogłam Ci? Postaw mi wirtualną kawę! →

Przeczytaj podobne wpisy

Kategorie

6 komentarzy

  1. 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?

    Odpowiedz
    • 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?

      Odpowiedz
      • 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.

        Odpowiedz
        • 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 🙂

          Odpowiedz
          • Rozwiązałem to w inny sposób.
            Ukrywanie kolumn ma sens przy prostym układzie, w którym mamy tylko kilka kolumn. W przypadku gdy chcemy by część danych była widoczna, nie możemy ukryć całej kolumny. Jedynym wyjściem jest zastosowania paru trików z formatowaniem warunkowym aktywnym tylko na wydruku i w moim przypadku również po zapisaniu pliku z ofertą.
            Pozdrawiam

          • Jesiol, super, fajnie, że znalazłeś rozwiązanie!

Wyślij komentarz

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