Czyli zapisywanie pliku do PDF przyciskiem
Chodzi o to, że mamy plik w Excelu, np. ofertę dla klienta, i chcemy ją zapisać na dysku jako plik PDF. Jest to bardzo prosta czynność, którą spokojnie możemy wykonać ręcznie kilkoma kliknięciami myszki. Natomiast, gdy takich ofert generujemy sporo – zaoszczędzenie nawet tych kilku kliknięć może się okazać zbawienne.
I my właśnie te kilka kliknięć zaoszczędzimy dzięki prostemu makru: po kliknięciu przycisku drukowania, Excel stworzy plik PDF, który zapisze w tym samym katalogu, co sam jest i nazwie go tak, jak nazwa klienta.
Formatka będzie prosta i tak na prawdę nie ma ona kompletnie żadnego znaczenia. I tak będziemy zapisywać do PDF arkusz, czyli ważniejsze będą tutaj Twoje ustawienia wydruku danego arkusza. Ja drukuję obszar wydruku, który mieści się na jednej stronie, jest logo, data wydruku i wyśrodkowanie w poziomie:
To, co jest istotne, to nazwanie komórki D3 jako Klient. Po tej nazwie bowiem będziemy przywoływali klienta w kodzie VBA.
A sam kod można w dużej mierze nagrać. Konkretnie zapisywanie pliku jako PDF. Po nagraniu otrzymamy taki fragment kodu:
ActiveSheet.ExportAsFixedFormat Type:=xlTypePDF, Filename:= _ "C\Users\....\MojPDF.pdf", _ Quality:=xlQualityStandard, _ IncludeDocProperties:=True, _ IgnorePrintAreas:=False, _ OpenAfterPublish:=False
I ścieżka dostępu w nim zawarta będzie stała. My chcemy dynamiczną, w zależności od położenia naszego Excela na dysku. To będzie więc do zmiany.
Do zmiany będzie również nazwa samego PDF’a. Obecnie też jest stała (MojPDF.pdf), a my chcemy, by plik nazywał się tak, jak klient z komórki D3 (nazwana jako Klient).
Parametryzowanie kodu
Będziemy potrzebowali dwóch zmiennych: ścieżka i klient. Obie będą tekstowe i umieszczę je w procedurze MojPDF.
Sub MojPDF() Dim Sciezka As String, Klient As String End Sub
Ścieżka to będzie ścieżka pliku Excela, w którym obecnie się znajdujemy, a klient to wartość komórki o nazwie Klient w aktywnym arkuszu (koniecznie musisz ją nazwać, ponieważ inaczej kod się wykrzaczy):
Sciezka = ThisWorkbook.Path & "\" Klient = ActiveSheet.Range("Klient").Value
Tak na prawdę pobranie tych danych to połowa sukcesu. Można jeszcze dorzucić sprawdzanie, czy user wpisał nazwę klienta. Jeśli tego nie zrobił, możemy narzucić mu jakąś nazwę, np. ambitne: “Klient” ;). Oczywiście pomysłów na to zabezpieczenie może być wiele (np. wyskakująca tabliczka z informacją, że nie wpisał klienta i koniec makra). Ja ograniczę się tutaj do wersji najprostszej:
If Klient = "" Then Klient = "Klient"
Teraz wystarczy tylko odpowiednio połączyć zmienne z kodem nagranym przez rejestrator – zamiast sztywnej ścieżki dostępu podpinamy naszą i łączymy ją z nazwą klienta:
ActiveSheet.ExportAsFixedFormat Type:=xlTypePDF, Filename:= _ Sciezka & Klient & ".pdf", _ Quality:=xlQualityStandard, _ IncludeDocProperties:=True, _ IgnorePrintAreas:=False, _ OpenAfterPublish:=True End Sub
Całość wygląda 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
Ostatnia instrukcja: OpenAfterPublish:=True oznacza, że PDF zostanie otwarty zaraz po utworzeniu. Jeśli tego nie chcesz – zmień to na OpenAfterPublish:=False.
Przypisywanie makra do przycisku
Teraz kwestia podpięcia makra do przycisku. Ja lubię przyciski obrazkowe, dlatego na mojej formatce widzicie obrazek, natomiast można oczywiście podpiąć do standardowego formantu formularza (opisywałam to tutaj, tylko wybierałam suwak, a nie przycisk).
Aby przypisać makro do obrazka, czy przycisku:
1. umieść obrazek/przycisk w arkuszu
2. kliknij na niego prawym przyciskiem myszy i…
3. wybierz opcję Przypisz makro
4. następnie z listy w okienku Przypisywanie makra wybierz to makro, które chcesz uruchomić po kliknięciu na ten obrazek/przycisk.
I gotowe!
Teraz, jak naciśniesz ten obrazek/przycisk, zostanie uruchomione nasze makro i aktywny arkusz zapisany jako PDF .
Plik do pobrania (pamiętaj o włączeniu makr)
MalinowyExcel Zapisz PDF w tym samym katalogu co Excel dw.xlsm
I wersja wideo wpisu: