Quantcast
Channel: Malinowy Excel
Viewing all articles
Browse latest Browse all 291

Zapisz PDF z taką samą nazwą co plik Excela (VBA)

$
0
0

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:

Formatka

Formatka

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

 

 


Viewing all articles
Browse latest Browse all 291

Trending Articles


TRX Antek AVT - 2310 ver 2,0


Автовишка HAULOTTE HA 16 SPX


POTANIACZ


Zrób Sam - rocznik 1985 [PDF] [PL]


Maxgear opinie


BMW E61 2.5d błąd 43E2 - klapa gasząca a DPF


Eveline ➤ Matowe pomadki Velvet Matt Lipstick 500, 506, 5007


Auta / Cars (2006) PLDUB.BRRip.480p.XviD.AC3-LTN / DUBBING PL


Peugeot 508 problem z elektroniką


AŚ Jelenia Góra