Converteer Excel naar PDF met VBA - De enige gids die u nodig heeft

*Dit is een gastpost van Ryan Wells, een collega-blogger en een briljante VBA-ontwikkelaar.*

Als u met Excel werkt, is u ongetwijfeld gevraagd om samenvattingen van uw werk te maken.

Verkooprapporten, facturen, prognoses, planningen, noem maar op.

Weet je wat al deze documenten gemeen hebben? Ze zien er geweldig uit in PDF-vorm. Weet je wat nog meer? Management houdt van PDF's!

Converteer Excel naar PDF

In deze zelfstudie laat ik u zien hoe u Excel VBA gebruikt om allerlei Excel-objecten naar PDF's te converteren:

Ik ga elk van de macro's met wat commentaar presenteren. Op die manier kun je ze snel vinden, naar je VBA-editor kopiëren en gebruiken.

Wanneer u een van deze macro's uitvoert, verschijnt een dialoogvenster Opslaan als waarin u wordt gevraagd waar u uw PDF wilt opslaan. De standaardnaam bevat de datum en tijdstempel waarop u de macro uitvoerde in de indeling jjjjmmdd_uummss.

Laten we er meteen naar toe gaan.

Dit zijn de macro's:

Selectie afdrukken naar PDF

Deze is mijn persoonlijke favoriet. Deze macro converteert de cellen die u actief hebt geselecteerd naar een PDF.

Als je maar één cel hebt geselecteerd, is de VBA-macro slim genoeg om te beseffen dat je waarschijnlijk niet slechts één cel wilt converteren, dus wordt je gevraagd om het bereik te selecteren dat je wilt converteren:

Sub PrintSelectionToPDF() 'SUBROUTINE: PrintSelectionToPDF 'ONTWIKKELAAR: Ryan Wells 'BESCHRIJVING: Druk uw momenteel geselecteerde bereik af naar een PDF Dim ThisRng As Range Dim strfile As String Dim mijn bestand As Variant If Selection.Count = 1 Stel vervolgens ThisRng = Application.InputBox in( "Selecteer een bereik", "Get Range", Type:=8) Anders Set ThisRng = Selection End If 'Prompt for save location strfile = "Selection" & "_" _ & Format(Now(), "yyyymmdd_hhmmss") _ & ".pdf" strfile = ThisWorkbook.Path & "\" & strfile myfile = Application.GetSaveAsFilename _ (InitialFileName:=strfile, _ FileFilter:="PDF-bestanden (*.pdf), *.pdf", _ Title:= "Selecteer map en bestandsnaam om als PDF op te slaan") Als mijn bestand "False" Dan 'save as PDF ThisRng.ExportAsFixedFormat Type:=xlTypePDF, Filename:= _ myfile, Quality:=xlQualityStandard, IncludeDocProperties:=True, _ IgnorePrintAreas:= False, OpenAfterPublish:=True Else MsgBox "Geen bestand geselecteerd. PDF wordt niet opgeslagen", vbOKOnly, "Geen bestand geselecteerd" End If End Sub

Nadat u het bereik hebt geselecteerd en op OK hebt geklikt, wordt een dialoogvenster weergegeven waarin u kunt selecteren waar u de PDF wilt opslaan.

Het kiest automatisch de datum en tijd uit de klok van uw systeem en voegt deze toe aan de bestandsnaam.

Eén tabel afdrukken naar PDF

Veel krachtige Excel-gebruikers slaan hun gegevens op in georganiseerde tabellen. Sumit Bansal houdt zelf zo van Excel-tabellen dat hij ze een verborgen schat in Excel noemt.

Deze macro drukt een tabel naar keuze af naar een PDF. Wanneer u de macro uitvoert, wordt u gevraagd om de naam van de tabel die u wilt opslaan.

Sub PrintTableToPDF() 'SUBROUTINE: PrintTableToPDF 'ONTWIKKELAAR: Ryan Wells 'BESCHRIJVING: Druk een tabel naar keuze af naar een PDF Dim strfile As String Dim mijnfile As Variant Dim strTable As String, r As Range Application.ScreenUpdating = False 'Enter the table naam die u wilt opslaan strTable = InputBox("Wat is de naam van de tabel die u wilt opslaan?", "Enter Table Name") 'Table you want to save If Trim(strTable) = "" Then Exit Sub 'Vraag om op te slaan locatie strfile = strTable & "_" _ & Format(Now(), "yyyymmdd_hhmmss") _ & ".pdf" strfile = ThisWorkbook.Path & "\" & strfile myfile = Application.GetSaveAsFilename _ (InitialFileName:=strfile, _ FileFilter:="PDF-bestanden (*.pdf), *.pdf", _ Title:="Selecteer map en bestandsnaam om als PDF op te slaan") Als mijn bestand "False" is, sla dan op als PDF-bereik (strTable). ExportAsFixedFormat Type :=xlTypePDF, Bestandsnaam:=mijnbestand, Kwaliteit:=xlQualityStandard, _ IncludeDocProperties:=True, IgnorePrintAreas:=False, OpenAfterPublish:=True Else MsgBox "Geen bestand geselecteerd. PDF wordt niet Saved", vbOKOnly, "No File Selected" End If Application.DisplayAlerts = False LetsContinue: With Application .ScreenUpdating = True .DisplayAlerts = True End With Exit Sub End Sub

Nadat u de naam van de tabel hebt ingevoerd en op OK hebt geklikt, wordt een dialoogvenster weergegeven waarin u kunt selecteren waar u de PDF wilt opslaan.

Het kiest automatisch de datum en tijd uit de klok van uw systeem en voegt deze toe aan de bestandsnaam.

Alle tabellen afdrukken om PDF's te scheiden

Als uw spreadsheet meerdere tabellen heeft en u elke tabel in een afzonderlijke PDF moet opslaan, kunt u deze VBA-code uitvoeren.

Wanneer u deze macro uitvoert, verschijnt er een dialoogvenster waarin u wordt gevraagd de map te selecteren waarin u uw PDF's wilt opslaan.

Nadat u uw map hebt gekozen, slaat de macro elke tabel op in een PDF, waarbij de tabelnaam handig in de titel van de PDF wordt weergegeven.

Sub PrintAllTablesToPDFs() 'SUBROUTINE: PrintAllTablesToPDFs' ONTWIKKELAAR: Ryan Wells 'BESCHRIJVING: Print elke tabel in uw spreadsheet naar een andere 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 = "Waar wilt u uw PDF opslaan?" .ButtonName = "Hier opslaan" .InitialFileName = ThisWorkbook.Path If .Show = -1 Then ' als OK wordt ingedrukt sfolder = .SelectedItems(1) Else End End If End With For Each Sht In ThisWorkbook.Worksheets For Each tbl In sht .ListObjects mijnbestand = ThisWorkbook.Name & "" & tbl.Naam & "" _ & Format(Now(), "yyyymmdd_hhmmss") _ & ".pdf" myfile = sfolder & "\" & myfile sht.Range(tbl.Name).ExportAsFixedFormat Type:=xlTypePDF, Filename:= _ myfile, Quality :=xlQualityStandard, IncludeDocProperties:=True, _ IgnorePrintAreas:=False, OpenAfterPublish:=True Volgende tbl Volgende sht End Sub

Alle bladen afdrukken naar één PDF

Ik weet niet hoe het met u zit, maar in mijn werk moeten we PDF-kopieën van bijna al onze spreadsheets bewaren. We voegen de PDF-kopieën van onze spreadsheets toe aan onze ontwerpberekeningen. Deze PDF's werden vroeger geconverteerd naar microfiche en bewaard voor langdurige bewaring. Weet je, voor het geval de apocalyps zou plaatsvinden.

Als u zich in een vergelijkbare situatie bevindt, is het fijn om alle bladen in uw spreadsheet automatisch naar één PDF te kunnen converteren. Hier is een VBA-macro die precies dat zal doen:

Sub PrintAllSheetsToPDF() 'SUBROUTINE: PrintAllSheetsToPDF' ONTWIKKELAAR: Ryan Wells 'BESCHRIJVING: Combineer al uw werkbladen in één PDF Dim strSheets() As String Dim strfile As String Dim sh As Worksheet Dim icount As Integer Dim myfile As Variant 'Save Chart Bladnamen naar een array voor elke sh in ActiveWorkbook.Worksheets If sh.Visible = xlSheetVisible Dan Redim Preserve strSheets(icount) strSheets(icount) = sh.Name icount = icount + 1 End If Next sh If icount = 0 Dan 'Geen grafieken gevonden. Ponsfout MsgBox "Er kan geen PDF worden gemaakt omdat er geen bladen zijn gevonden.", , "Geen bladen gevonden" Exit Sub End If 'Prompt for save location strfile = "Sheets" & "_" _ & Format(Now(), " yyyymmdd_hhmmss") _ & ".pdf" strfile = ThisWorkbook.Path & "\" & strfile myfile = Application.GetSaveAsFilename _ (InitialFileName:=strfile, _ FileFilter:="PDF-bestanden (*.pdf), *.pdf", _ Title:="Selecteer map en bestandsnaam om op te slaan als PDF") Indien mijnbestand "False" Sla dan op als PDF ThisWorkbook.Sheets(strSheets).Select ActiveSheet.ExportAsFixedFormat Type:=xlTypePDF, Filename:= _ myfile, Quality: =xlQualityStandard, IncludeDocProperties:=True, _ IgnorePrintAreas:=False, OpenAfterPublish:=True Else MsgBox "Geen bestand geselecteerd. PDF wordt niet opgeslagen", vbOKOnly, "Geen bestand geselecteerd" End If End Sub

Grafiekbladen afdrukken naar PDF

Deze macro converteert al uw grafiekbladen naar één PDF - maar niet uw grafiekobjecten! Met grafiekbladen bedoel ik de grafieken die hun eigen tabblad hebben in uw lijst met spreadsheettabbladen:

Sub PrintChartSheetsToPDF() 'SUBROUTINE: PrintChartSheetsToPDF 'ONTWIKKELAAR: Ryan Wells 'BESCHRIJVING: Combineer alle kaartbladen in één PDF Dim strSheets() As String Dim strfile As String Dim ch As Object, sh As Worksheet Dim icount As Integer Dim myfile As Variant ' Sla grafiekbladnamen op in een array voor elke ch in ActiveWorkbook.Charts ReDim Preserve strSheets(icount) strSheets(icount) = ch.Name icount = icount + 1 Volgende ch If icount = 0 Dan 'Geen grafieken gevonden. Ponsfout MsgBox "Er kan geen PDF worden gemaakt omdat er geen grafiekbladen zijn gevonden.", , "Geen grafiekbladen gevonden" Exit Sub End If 'Prompt for save location strfile = "Charts" & "_" _ & Format(Now() , "yyyymmdd_hhmmss") _ & ".pdf" strfile = ThisWorkbook.Path & "\" & strfile myfile = Application.GetSaveAsFilename _ (InitialFileName:=strfile, _ FileFilter:="PDF-bestanden (*.pdf), *.pdf ", _ Title:="Selecteer map en bestandsnaam om op te slaan als PDF") Indien mijnbestand "False" Sla dan op als PDF ThisWorkbook.Sheets(strSheets).Select ActiveSheet.ExportAsFixedFormat Type:=xlTypePDF, Filename:= _ myfile, Quality:=xlQualityStandard, IncludeDocProperties:=True, _ IgnorePrintAreas:=False, OpenAfterPublish:=True Else MsgBox "Geen bestand geselecteerd. PDF wordt niet opgeslagen", vbOKOnly, "Geen bestand geselecteerd" End If End Sub

Grafiekobjecten naar PDF afdrukken

Deze macro bewaart al uw normale grafieken - grafiekobjecten - in een enkele PDF. Ongeacht op welk werkblad uw diagram staat, het wordt gepakt en opgeslagen in een PDF.

Er zal slechts één grafiek per pagina in de uiteindelijke PDF zijn.

Sub PrintChartsObjectsToPDF() 'SUBROUTINE: PrintChartsObjectsToPDF 'ONTWIKKELAAR: Ryan Wells 'BESCHRIJVING: Combineer alle grafiekobjecten in één PDF Dim ws As Worksheet, wsTemp As Worksheet Dim chrt As ChartObject Dim tp As Long Dim strfile As String Dim myfile As Variant Application. = False Set wsTemp = Sheets.Add tp = 10 With wsTemp For Each ws In ActiveWorkbook.Worksheets If ws.Name = wsTemp.Name Ga dan naar 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 + Selectie.Hoogte + 50 Volgende volgende: Volgende ws Eindig met 'Vragen voor opslaglocatie strfile = "Grafieken" & "_" _ & Format(Now(), "yyyymmdd\_hhmmss") _ & ".pdf" strfile = ActiveWorkbook.Path & "\" & strfile myfile = Application.GetSaveAsFilename _ (InitialFileName:=strfile, _ FileFilter:="PDF-bestanden (*.pdf), *.pdf", _ Title:="Select Fol der en bestandsnaam om als PDF op te slaan") If myfile False Dan 'save as PDF wsTemp.ExportAsFixedFormat Type:=xlTypePDF, Filename:=myfile, Quality:=xlQualityStandard, _ IncludeDocProperties:=True, IgnorePrintAreas:=False, OpenAfterPublish:= True 'Anders' MsgBox "Geen bestand geselecteerd. PDF wordt niet opgeslagen", vbOKOnly, "No File Selected" End If Application.DisplayAlerts = False wsTemp.Delete With Application .ScreenUpdating = True .DisplayAlerts = True End With Exit Sub End Sub

Als je vragen hebt, stel ze dan in het opmerkingengedeelte, waar Ryan en ik daar op je wachten.

Misschien vind je de volgende Excel-zelfstudies misschien ook leuk:

  • Een PDF-bestand insluiten in een Excel-werkblad
  • Excel VBA-loops: voor volgende, doe terwijl, doe tot, voor elk (met voorbeelden).
  • Een macro opnemen in Excel
  • Meerdere werkmappen combineren in één Excel-werkmap
  • Hoe een macro in Excel uit te voeren
  • Een Excel-invoegtoepassing maken en gebruiken
  • Excel VBA-foutafhandeling
  • Splits elk Excel-blad in afzonderlijke bestanden
  • Hoe een XML-bestand in Excel te importeren | Converteer XML naar Excel

Over de auteur: Ryan Wells is nucleair ingenieur en professionele VBA-ontwikkelaar. Hij publiceert zijn gemakkelijk te begrijpen Excel VBA-tutorials om anderen te helpen betere macro's te schrijven. Naast het lesgeven in VBA, is Ryan de hoofdontwikkelaar van verschillende Excel-invoegtoepassingen. Je kunt zijn tutorials vinden op WellsR.com.

wave wave wave wave wave