Czyli wystarczy mała podmianka w kodzie
Prawie dwa lata temu napisałam artykuł, gdzie pokazywałam jak z pliku Excela wygenerować plik PDF i zapisać go pod taką nazwą, jak wartość wybranej komórki w arkuszu. Wszystko to za pomocą przycisku. Napisałam w tym celu makro, które szczegółowo omówiłam w tym artykule.
Niedawno zapytaliście mnie jednak, jak zrobić, aby wygenerowany plik nazywał się dokładnie tak samo, jak plik Excela, z którego powstał. Brzmi strasznie, ale w rzeczywistości jest prościutkie. Wymaga bowiem jednej małej modyfikacji w kodzie i ją właśnie opiszę w tym artykule.
Formatka wygląda identycznie, jak w poprzednim artykule:
Do dzieła!
Generowanie PDF z Excela – poprzedni kod
Dla przypomnienia wkleję tutaj kod, który będę teraz modyfikować. Oto on:
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
BTW: Powyższe makro jest przypisane do przycisku, co dokładnie opisałam we wspomnianym artykule.
Wystarczy nam jedna zmienna
Poprzednie makro pobierało nazwę klienta z komórki D3, która była nazwana jako Klient. Teraz jest nam to niepotrzebne. Zarówno ścieżkę dostępu do pliku i jego nazwę pobierzemy bowiem za pomocą innej właściwości. Usuńmy więc 3 linijki:
- deklarację zmiennej Klient,
- przypisanie do niej wartości,
- i if-a, sprawdzającego wartość zmiennej Klient.
Ma powstać coś takiego:
Sub MojPDF() Dim Sciezka As String Sciezka = ThisWorkbook.Path & "\" ActiveSheet.ExportAsFixedFormat Type:=xlTypePDF, Filename:= _ Sciezka & Klient & ".pdf", _ Quality:=xlQualityStandard, _ IncludeDocProperties:=True, _ IgnorePrintAreas:=False, _ OpenAfterPublish:=True End Sub
Modyfikacja zmiennej i nowa właściwość obiektu ThisWorkbook
Teraz zmodyfikujemy zmienną Sciezka. Do tej pory pobierała ona tylko ścieżkę dostępu do pliku Excela. Teraz pobierze tę ścieżkę, ale też nazwę pliku. W tym celu skorzystamy z właściwości FullName obiektu ThisWorkbook. Tak:
Sciezka = ThisWorkbook.FullName
Zwraca ona niestety też rozszerzenie pliku, czyli np.:
C:\MalinowyExcel Zapisz PDF z taką samą nazwą co Excel.xlsb
Trzeba się tego pozbyć, bo w końcu chcemy PDF, a nie xlsb.
Usuń excelowe rozszerzenie pliku
A teraz pozbędziemy się rozszerzenia excelowego z naszej nazwy, czyli tego: .xlsb. Zrobimy to dopisując taki kod:
Sciezka = Left(Sciezka, Len(Sciezka) - 5)
W efekcie dostaniemy taką wartość zmiennej Nazwa:
C:\MalinowyExcel Zapisz PDF z taką samą nazwą co Excel
I to już prawie koniec.
Generowanie PDF z nazwą pliku Excela
Wykorzystamy teraz kod, który już wcześniej mieliśmy, tylko zamiast zmiennej Klient wstawimy zmienną Sciezka i usuniemy wystąpienie zmiennej Klient. Reszta jest OK.\
Całość wygląda tak.:
Sub MojPDF() Dim Sciezka As String, Nazwa As String Sciezka = ThisWorkbook.FullName Sciezka = Left(Sciezka, Len(Sciezka) - 5) ActiveSheet.ExportAsFixedFormat Type:=xlTypePDF, Filename:= _ Sciezka & ".pdf", _ Quality:=xlQualityStandard, _ IncludeDocProperties:=True, _ IgnorePrintAreas:=False, _ OpenAfterPublish:=True End Sub
A jeśli chcesz, aby plik PDF został zapisany dodatkowo z dzisiejszą datą – zajrzyj do tego wpisu.
Pamiętaj, aby zapisać gotowy plik z obsługą makr (*xlsm) lub binarny (*xlsb). Załączony do tego artykułu plik ma właśnie to drugie rozszerzenie.
Jeśli arkusz się brzydko drukuje – ustaw odpowiednie opcje drukowania. Polecam tutaj obszar wydruku i wpasowanie w strony.
A uruchamiając plik pamiętaj, aby włączyć makra.
Tutaj znajdziesz plik do pobrania:
MalinowyExcel Zapisz PDF z taką samą nazwą co Excel.zip
I wersję wideo, gdzie pokazuję po kolei co zmienić w kodzie:
Powiązane produkty
-
- Nagrywanie makr – dzięki tej lekcji dowiesz się jak w sprytny sposób nagrywać całkiem inteligentne makra