Konwertuj Excel na PDF za pomocą VBA - jedyny przewodnik, którego będziesz potrzebować

Spisie treści

*To post gościnny autorstwa Ryana Wellsa, kolegi blogera i genialnego programisty VBA.*

Jeśli pracujesz z Excelem, niewątpliwie zostałeś poproszony o stworzenie podsumowań swojej pracy.

Raporty sprzedaży, faktury, prognozy, harmonogramy, to wszystko.

Wiesz, co łączy te wszystkie dokumenty? Świetnie wyglądają w formie PDF. Wiesz co jeszcze? Kierownictwo kocha pliki PDF!

Konwertuj Excel na PDF

W tym samouczku pokażę, jak używać Excel VBA do konwertowania wszelkiego rodzaju obiektów Excela na pliki PDF:

Każde z makr przedstawię z komentarzem. W ten sposób będziesz mógł szybko je znaleźć, skopiować do edytora VBA i używać ich.

Po uruchomieniu dowolnego z tych makr pojawi się okno dialogowe Zapisz jako z pytaniem, gdzie chcesz zapisać plik PDF. Domyślna nazwa zawiera datę i znacznik czasu wykonania makra w formacie rrrrmmdd_ggmmss.

Przejdźmy od razu.

Oto makra:

Drukuj zaznaczenie do PDF

Ten jest moim ulubionym. To makro przekonwertuje aktywnie wybrane komórki na plik PDF.

Jeśli masz wybraną tylko jedną komórkę, makro VBA jest wystarczająco inteligentne, aby zdać sobie sprawę, że prawdopodobnie nie chcesz konwertować tylko jednej komórki, więc prosi o wybranie zakresu, który chcesz przekonwertować:

Sub PrintSelectionToPDF() 'SUBROUTINE: PrintSelectionToPDF 'DEVELOPER: Ryan Wells 'OPIS: Drukuj aktualnie wybrany zakres do pliku PDF Dim ThisRng As Range Dim strfile As String Dim myfile As Variant Jeśli Selection.Count = 1 Następnie ustaw ThisRng = Application.InputBox( "Wybierz zakres", "Pobierz zakres", Type:=8) Else Set ThisRng = Koniec zaznaczenia If 'Prompt for save location strfile = "Selection" & "_" _ & Format(Now(), "rrrrmmdd_hhmmss") _ & ".pdf" strfile = ThisWorkbook.Path & "\" & strfile myfile = Application.GetSaveAsFilename _ (InitialFileName:=strfile, _ FileFilter:="PDF Files (*.pdf), *.pdf", _ Title:= „Wybierz folder i nazwę pliku do zapisania jako PDF”) Jeśli myfile „False” Zapisz jako PDF ThisRng.ExportAsFixedFormat Type:=xlTypePDF, Filename:= _ myfile, Quality:=xlQualityStandard, IncludeDocProperties:=True, _ IgnorePrintAreas:= False, OpenAfterPublish:=True Else MsgBox "Nie wybrano pliku. PDF nie zostanie zapisany", vbOKOnly, "Nie wybrano pliku" End If End Sub

Po wybraniu zakresu i kliknięciu OK wyświetli się okno dialogowe, w którym możesz wybrać miejsce, w którym chcesz zapisać plik PDF.

Automatycznie wybierze datę i godzinę z zegara systemu i doda ją do nazwy pliku.

Wydrukuj jedną tabelę do pliku PDF

Wielu zaawansowanych użytkowników programu Excel przechowuje swoje dane w zorganizowanych tabelach. W rzeczywistości sam Sumit Bansal tak bardzo lubi tabele Excela, że ​​nazywa je ukrytym skarbem w Excelu.

To makro drukuje wybraną tabelę do pliku PDF. Po uruchomieniu makra wyświetli monit o nazwę tabeli, którą chcesz zapisać.

Sub PrintTableToPDF() 'SUBROUTINE: PrintTableToPDF 'DEVELOPER: Ryan Wells 'DESCRIPTION: Drukuj wybraną tabelę do pliku PDF Dim strfile As String Dim myfile As Variant Dim strTable As String, r As Range Application.ScreenUpdating = False 'Wprowadź tabelę nazwa, którą chcesz zapisać strTable = InputBox("Jaka jest nazwa tabeli, którą chcesz zapisać?", "Enter Table Name") 'Tabela, którą chcesz zapisać If Trim(strTable) = "" Then Exit Sub 'Pytaj o zapisanie location strfile = strTable & "_" _ & Format(Now(), "rrrrmmdd_hhmmss") _ & ".pdf" strfile = ThisWorkbook.Path & "\" & strfile myfile = Application.GetSaveAsFilename _ (InitialFileName:=strfile, _ FileFilter:="Pliki PDF (*.pdf), *.pdf", _ Title:="Wybierz folder i nazwę pliku do zapisania jako PDF") Jeśli myfile "False" Następnie zapisz jako PDF Zakres(strTable).ExportAsFixedFormat Type :=xlTypePDF, Filename:=myfile, Quality:=xlQualityStandard, _ IncludeDocProperties:=True, IgnorePrintAreas:=False, OpenAfterPublish:=True Else MsgBox "Nie wybrano pliku. PDF nie zostanie zapisano", vbOKOnly, "Nie wybrano pliku" End If Application.DisplayAlerts = False LetsContinue: Z aplikacją .ScreenUpdating = True .DisplayAlerts = True Koniec z wyjściem Sub End Sub

Po wpisaniu nazwy tabeli i kliknięciu OK wyświetli się okno dialogowe, w którym możesz wybrać miejsce, w którym chcesz zapisać plik PDF.

Automatycznie wybierze datę i godzinę z zegara systemu i doda ją do nazwy pliku.

Wydrukuj wszystkie tabele, aby oddzielić pliki PDF

Jeśli Twój arkusz kalkulacyjny zawiera kilka tabel i musisz zapisać każdą z nich w osobnym pliku PDF, możesz uruchomić ten kod VBA.

Po uruchomieniu tego makra pojawi się okno dialogowe z prośbą o wybranie folderu, w którym chcesz zapisać pliki PDF.

Po wybraniu folderu makro zapisze każdą tabelę w pliku PDF, a nazwa tabeli będzie dogodnie wyświetlana w tytule pliku PDF.

Sub PrintAllTablesToPDFs() 'SUBROUTINE: PrintAllTablesToPDFs 'DEVELOPER: Ryan Wells 'OPIS: Wydrukuj każdą tabelę w arkuszu kalkulacyjnym do innego pliku PDF Dim strTables() As String Dim strfile As String Dim ch As Object, sh As Worksheet Dim icount As Integer Dim myfile As Variant Dim tbl As ListObject Dim sht As Worksheet With Application.FileDialog(msoFileDialogFolderPicker) .Title = "Gdzie chcesz zapisać plik PDF?" .ButtonName = "Zapisz tutaj". .ListObjects myfile = ThisWorkbook.Name & "" & tabl.Nazwa & "" _ & Format(Now(), "rrrrmmdd_hhmmss") _ & ".pdf" myfile = sfolder & "\" & myfile sht.Range(tab.Name).ExportAsFixedFormat Type:=xlTypePDF, Filename:= _ myfile, Quality :=xlQualityStandard, IncludeDocProperties:=True, _ IgnorePrintAreas:=False, OpenAfterPublish:=True Next tbl Next sht End Sub

Drukuj wszystkie arkusze do jednego pliku PDF

Nie wiem jak wy, ale w mojej pracy musimy zachowywać kopie PDF prawie wszystkich naszych arkuszy kalkulacyjnych. Dołączamy kopie PDF naszych arkuszy kalkulacyjnych do naszych obliczeń projektowych. Te pliki PDF były kiedyś konwertowane na mikrofisze i przechowywane w skarbcu w celu długoterminowego przechowywania. Wiesz, na wypadek apokalipsy.

Jeśli znajdziesz się w podobnej sytuacji, fajnie jest móc automatycznie przekonwertować wszystkie arkusze w arkuszu kalkulacyjnym na jeden plik PDF. Oto makro VBA, które właśnie to zrobi:

Sub PrintAllSheetsToPDF() 'SUBROUTINE: PrintAllSheetsToPDF 'DEVELOPER: Ryan Wells 'OPIS: Połącz wszystkie arkusze w jeden PDF Dim strSheets() As String Dim strfile As String Dim sh As Worksheet Dim icount As Integer Dim myfile As Variant 'Zapisz nazwy arkuszy wykresu do tablicy dla każdego sh In ActiveWorkbook.Worksheets If sh.Visible = xlSheetVisible Then ReDim Zachowaj strSheets(icount) strSheets(icount) = sh.Name icount = icount + 1 End If Next sh If icount = 0 Then 'Nie znaleziono wykresów. Błąd dziurkowania MsgBox "Nie można utworzyć pliku PDF, ponieważ nie znaleziono arkuszy.", , "Nie znaleziono arkuszy" Zakończ Sub End If 'Pytaj o lokalizację zapisu strfile = "Arkusze" & "_" _ & Format(Now(), " rrrrmmdd_hhmmss") _ & ".pdf" strfile = ThisWorkbook.Path & "\" & strfile myfile = Application.GetSaveAsFilename _ (InitialFileName:=strfile, _ FileFilter:="Pliki PDF (*.pdf), *.pdf", _ Title:="Wybierz folder i nazwę pliku do zapisania jako PDF") Jeśli myfile "False" Następnie zapisz jako PDF ThisWorkbook.Sheets(strSheets).Wybierz ActiveSheet.ExportAsFixedFormat Type:=xlTypePDF, Filename:= _ myfile, Quality: =xlQualityStandard, IncludeDocProperties:=True, _ IgnorePrintAreas:=False, OpenAfterPublish:=True Else MsgBox "Nie wybrano pliku. PDF nie zostanie zapisany", vbOKOnly, "Nie wybrano pliku" End If End Sub

Wydrukuj arkusze wykresów do PDF

To makro konwertuje wszystkie arkusze wykresów w jeden plik PDF - ale nie obiekty wykresu! Przez arkusze wykresów rozumiem wykresy, które mają własną kartę na liście kart arkuszy kalkulacyjnych:

Sub PrintChartSheetsToPDF() 'SUBROUTINE: PrintChartSheetsToPDF 'DEVELOPER: Ryan Wells 'OPIS: Połącz wszystkie arkusze wykresów w jeden PDF Dim strSheets() As String Dim strfile As String Dim ch As Object, sh As Worksheet Dim icount As Integer Dim myfile As Variant ' Zapisz nazwy arkuszy wykresów w tablicy dla każdego ch w ActiveWorkbook.Charts ReDim Zachowaj strSheets(icount) strSheets(icount) = ch.Name icount = icount + 1 Następny ch If icount = 0 Then 'Nie znaleziono wykresów. Błąd dziurkowania MsgBox "Nie można utworzyć pliku PDF, ponieważ nie znaleziono arkuszy wykresów.", , "Nie znaleziono arkuszy wykresów" Zakończ Sub End If 'Pytaj o lokalizację zapisu strfile = "Wykresy" & "_" _ & Format(Now() , "rrrrmmdd_hhmmss") _ & ".pdf" strfile = ThisWorkbook.Path & "\" & strfile myfile = Application.GetSaveAsFilename _ (InitialFileName:=strfile, _ FileFilter:="Pliki PDF (*.pdf), *.pdf ", _ Title:="Wybierz folder i nazwę pliku do zapisania jako PDF") Jeśli myfile "False" Następnie zapisz jako PDF ThisWorkbook.Sheets(strSheets).Wybierz ActiveSheet.ExportAsFixedFormat Type:=xlTypePDF, Filename:= _ myfile, Quality:=xlQualityStandard, IncludeDocProperties:=True, _ IgnorePrintAreas:=False, OpenAfterPublish:=True Else MsgBox "Nie wybrano pliku. PDF nie zostanie zapisany", vbOKOnly, "Nie wybrano pliku" End If End Sub

Drukuj obiekty wykresu do PDF

To makro zapisuje wszystkie normalne wykresy - obiekty wykresów - w jednym pliku PDF. Niezależnie od tego, na którym arkuszu znajduje się Twój wykres, zostanie on pobrany i zapisany w pliku PDF.

W ostatecznym pliku PDF będzie tylko jeden wykres na stronę.

Sub PrintChartsObjectsToPDF() 'SUBROUTINE: PrintChartsObjectsToPDF 'PROJEKTOR: Ryan Wells 'OPIS: Połącz wszystkie obiekty wykresu w jeden plik PDF Dim ws As Worksheet, wsTemp As Worksheet Dim chrt As ChartObject Dim tp As Long Dim strfile As String Dim myScreen As Wariant aplikacji. = False Ustaw wsTemp = Arkusze.Dodaj tp = 10 Z wsTemp Dla każdego ws In ActiveWorkbook.Worksheets If ws.Name = wsTemp.Name Then GoTo nextws: For Each chrt In ws.ChartObjects chrt.Copy wsTemp.Range("A1") .PasteSpecial Selection.Top = tp Selection.Left = 5 If Selection.TopLeftCell.Row > 1 Then ActiveSheet.Rows(Selection.TopLeftCell.Row).PageBreak = xlPageBreakManual End If tp = tp + Selection.Height + 50 Next nextws: Next ws End With 'Monituj o lokalizację zapisu strfile = "Wykresy" & "_" _ & Format(Now(), "rrrrmmdd\_hhmmss") _ & ".pdf" strfile = ActiveWorkbook.Path & "\" & strfile myfile = Application.GetSaveAsFilename _ (InitialFileName:=strfile, _ FileFilter:="Pliki PDF (*.pdf), *.pdf", _ Title:="Wybierz Fol der i nazwa pliku do zapisania jako PDF") Jeśli myfile False Następnie zapisz jako PDF wsTemp.ExportAsFixedFormat Type:=xlTypePDF, Filename:=myfile, Quality:=xlQualityStandard, _ IncludeDocProperties:=True, IgnorePrintAreas:=False, OpenAfterPublish:= True 'Else' MsgBox "Nie wybrano pliku. PDF nie zostanie zapisany", vbOKOnly, "Nie wybrano pliku" End If Application.DisplayAlerts = False wsTemp.Delete With Application .ScreenUpdating = True .DisplayAlerts = True Koniec z wyjściem Sub End Sub

Jeśli masz jakieś pytania, zostaw je w sekcji komentarzy, gdzie Ryan i ja będziemy tam na Ciebie czekać.

Możesz również polubić następujące samouczki programu Excel:

  • Jak osadzić plik PDF w arkuszu programu Excel.
  • Pętle Excel VBA: For Next, Do While, Do Do, For Each (z przykładami).
  • Jak nagrać makro w programie Excel
  • Jak połączyć wiele skoroszytów w jeden skoroszyt programu Excel.
  • Jak uruchomić makro w programie Excel.
  • Jak utworzyć i używać dodatku programu Excel.
  • Obsługa błędów Excel VBA
  • Podziel każdy arkusz Excela na osobne pliki
  • Jak zaimportować plik XML do programu Excel | Konwertuj XML na Excel

O autorze: Ryan Wells jest inżynierem jądrowym i profesjonalnym programistą VBA. Publikuje swoje łatwe do zrozumienia samouczki Excel VBA, aby pomóc innym pisać lepsze makra. Oprócz nauczania VBA, Ryan jest głównym twórcą kilku dodatków do Excela. Możesz znaleźć jego tutoriale na WellsR.com.

Będziesz pomóc w rozwoju serwisu, dzieląc stronę ze swoimi znajomymi

wave wave wave wave wave