Konvertieren von Excel in PDF mit VBA - Der einzige Leitfaden, den Sie benötigen

Inhaltsverzeichnis

*Dies ist ein Gastbeitrag von Ryan Wells, einem Bloggerkollegen und brillanten VBA-Entwickler.*

Wenn Sie mit Excel arbeiten, wurden Sie zweifellos gebeten, Zusammenfassungen Ihrer Arbeit zu erstellen.

Verkaufsberichte, Rechnungen, Prognosen, Zeitpläne, was auch immer.

Wissen Sie, was all diese Dokumente gemeinsam haben? Sie sehen in PDF-Form toll aus. Weißt du was noch? Das Management liebt PDFs!

Excel in PDF konvertieren

In diesem Tutorial zeige ich Ihnen, wie Sie mit Excel VBA alle Arten von Excel-Objekten in PDFs konvertieren:

Ich werde jedes der Makros mit einem Kommentar präsentieren. Auf diese Weise können Sie sie schnell finden, in Ihren VBA-Editor kopieren und verwenden.

Wenn Sie eines dieser Makros ausführen, wird ein Dialogfeld Speichern unter angezeigt, in dem Sie gefragt werden, wo Sie Ihre PDF-Datei speichern möchten. Der Standardname enthält das Datum und den Zeitstempel, als Sie das Makro im Format yyyymmdd_hhmmss ausgeführt haben.

Kommen wir gleich dazu.

Hier die Makros:

Auswahl als PDF drucken

Dieser ist mein persönlicher Favorit. Dieses Makro konvertiert die Zellen, die Sie aktiv ausgewählt haben, in ein PDF.

Wenn Sie nur eine Zelle ausgewählt haben, ist das VBA-Makro intelligent genug, um zu erkennen, dass Sie wahrscheinlich nicht nur eine Zelle konvertieren möchten, sodass Sie aufgefordert werden, den Bereich auszuwählen, den Sie konvertieren möchten:

Sub PrintSelectionToPDF() 'SUBROUTINE: PrintSelectionToPDF 'ENTWICKLER: Ryan Wells 'BESCHREIBUNG: Drucken Sie Ihren aktuell ausgewählten Bereich als PDF Dim ThisRng As Range Dim strfile As String Dim myfile As Variant If Selection.Count = 1 Then Set ThisRng = Application.InputBox( "Select a range", "Get Range", Type:=8) Else Set ThisRng = Selection End If 'Nach Speicherort fragen strfile = "Selection" & "_" _ & Format(Now(), "yyyymmdd_hhmmss") _ & ".pdf" strfile = ThisWorkbook.Path & "\" & strfile myfile = Application.GetSaveAsFilename _ (InitialFileName:=strfile, _ FileFilter:="PDF Files (*.pdf), *.pdf", _ Title:= "Ordner- und Dateinamen zum Speichern als PDF auswählen") Wenn myfile "False" Dann 'als PDF speichern ThisRng.ExportAsFixedFormat Type:=xlTypePDF, Filename:= _ myfile, Quality:=xlQualityStandard, IncludeDocProperties:=True, _ IgnorePrintAreas:= False, OpenAfterPublish:=True Else MsgBox "Keine Datei ausgewählt. PDF wird nicht gespeichert", vbOKOnly, "Keine Datei ausgewählt" End If End Sub

Sobald Sie den Bereich ausgewählt und auf OK geklickt haben, wird ein Dialogfeld angezeigt, in dem Sie auswählen können, wo Sie das PDF speichern möchten.

Es wählt automatisch Datum und Uhrzeit aus der Uhr Ihres Systems und fügt sie dem Dateinamen hinzu.

Drucken Sie eine Tabelle als PDF

Viele Excel-Power-User speichern ihre Daten in organisierten Tabellen. Tatsächlich mag Sumit Bansal selbst Excel-Tabellen so sehr, dass er sie einen versteckten Schatz in Excel nennt.

Dieses Makro druckt eine Tabelle Ihrer Wahl in ein PDF. Wenn Sie das Makro ausführen, werden Sie nach dem Namen der Tabelle gefragt, die Sie speichern möchten.

Sub PrintTableToPDF() 'SUBROUTINE: PrintTableToPDF 'ENTWICKLER: Ryan Wells 'BESCHREIBUNG: Drucken einer Tabelle Ihrer Wahl als PDF Dim strfile As String Dim myfile As Variant Dim strTable As String, r As Range Application.ScreenUpdating = False 'Enter the table name, den Sie speichern möchten strTable = InputBox("Wie lautet der Name der Tabelle, die Sie speichern möchten?", "Enter Table Name") 'Tabelle, die Sie speichern möchten If Trim(strTable) = "" Then Exit Sub 'Aufforderung zum Speichern location strfile = strTable & "_" _ & Format(Now(), "yyyymmdd_hhmmss") _ & ".pdf" strfile = ThisWorkbook.Path & "\" & strfile myfile = Application.GetSaveAsFilename _ (InitialFileName:=strfile, _ FileFilter:="PDF-Dateien (*.pdf), *.pdf", _ Title:="Wählen Sie Ordner und Dateinamen zum Speichern als PDF aus") Wenn meine Datei "False" ist, dann "als PDF-Bereich (strTable).ExportAsFixedFormat Type" speichern :=xlTypePDF, Filename:=myfile, Quality:=xlQualityStandard, _ IncludeDocProperties:=True, IgnorePrintAreas:=False, OpenAfterPublish:=True Else MsgBox "Keine Datei ausgewählt. PDF wird nicht angezeigt" gespeichert", vbOKOnly, "Keine Datei ausgewählt" End If Application.DisplayAlerts = False LetsContinue: With Application .ScreenUpdating = True .DisplayAlerts = True End With Exit Sub End Sub

Nachdem Sie den Namen der Tabelle eingegeben und auf OK geklickt haben, wird ein Dialogfeld angezeigt, in dem Sie auswählen können, wo Sie die PDF-Datei speichern möchten.

Es wählt automatisch Datum und Uhrzeit aus der Uhr Ihres Systems und fügt sie dem Dateinamen hinzu.

Alle Tabellen in separate PDFs drucken

Wenn Ihre Tabelle mehrere Tabellen enthält und Sie jede in einer separaten PDF-Datei speichern müssen, können Sie diesen VBA-Code ausführen.

Wenn Sie dieses Makro ausführen, wird ein Dialogfeld angezeigt, in dem Sie aufgefordert werden, den Ordner auszuwählen, in dem Sie Ihre PDFs speichern möchten.

Sobald Sie Ihren Ordner ausgewählt haben, speichert das Makro jede Tabelle in einer PDF-Datei, wobei der Tabellenname bequem im Titel der PDF-Datei angezeigt wird.

Sub PrintAllTablesToPDFs() 'SUBROUTINE: PrintAllTablesToPDFs 'ENTWICKLER: Ryan Wells 'BESCHREIBUNG: Drucken Sie jede Tabelle in Ihrer Tabelle in ein anderes PDF Dim strTables() As String Dim strfile As String Dim ch As Object, sh Als Arbeitsblatt Dim icount As Integer Dim myfile As Variant Dim tbl As ListObject Dim sht As Worksheet With Application.FileDialog(msoFileDialogFolderPicker) .Title = "Wo möchten Sie Ihr PDF speichern?" .ButtonName = "Hier speichern" .InitialFileName = ThisWorkbook.Path If .Show = -1 Then ' wenn OK gedrückt wird sfolder = .SelectedItems(1) Else End End If End With For Each sht In ThisWorkbook.Worksheets For Each tbl In sht .ListObjects myfile = ThisWorkbook.Name & "" & tbl.Name & "" _ & 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 Next tbl Next sht End Sub

Alle Blätter in ein PDF drucken

Ich weiß nicht, wie es Ihnen geht, aber in meiner Arbeit müssen wir von fast allen Tabellenkalkulationen PDF-Kopien aufbewahren. Wir fügen die PDF-Kopien unserer Tabellenkalkulationen unseren Konstruktionsberechnungen bei. Diese PDFs wurden früher in Mikrofiche konvertiert und für eine langfristige Aufbewahrung gewölbt. Weißt du, falls die Apokalypse passiert ist.

Wenn Sie sich in einer ähnlichen Situation befinden, ist es schön, alle Blätter in Ihrer Tabelle automatisch in ein PDF konvertieren zu können. Hier ist ein VBA-Makro, das genau das tut:

Sub PrintAllSheetsToPDF() 'SUBROUTINE: PrintAllSheetsToPDF 'ENTWICKLER: Ryan Wells 'BESCHREIBUNG: Kombinieren Sie alle Ihre Arbeitsblätter in einem PDF Dim strSheets() As String Dim strfile As String Dim sh As Worksheet Dim icount As Integer Dim myfile als Variante 'Diagrammblattnamen speichern in ein Array für jedes sh in ActiveWorkbook.Worksheets If sh.Visible = xlSheetVisible Then ReDim Preserve strSheets(icount) strSheets(icount) = sh.Name icount = icount + 1 End If Next sh If icount = 0 Then 'Keine Diagramme gefunden. Stanzfehler MsgBox "Eine PDF kann nicht erstellt werden, da keine Blätter gefunden wurden.", , "Keine Blätter gefunden" Exit Sub End If 'Nach Speicherort fragen strfile = "Blätter" & "_" _ & Format(Now(), " yyyymmdd_hhmmss") _ & ".pdf" strfile = ThisWorkbook.Path & "\" & strfile myfile = Application.GetSaveAsFilename _ (InitialFileName:=strfile, _ FileFilter:="PDF Files (*.pdf), *.pdf", _ Title:="Ordner- und Dateinamen zum Speichern als PDF auswählen") If myfile "False" Then 'als PDF speichern ThisWorkbook.Sheets(strSheets).Select ActiveSheet.ExportAsFixedFormat Type:=xlTypePDF, Filename:= _ myfile, Quality: =xlQualityStandard, IncludeDocProperties:=True, _ IgnorePrintAreas:=False, OpenAfterPublish:=True Else MsgBox "Keine Datei ausgewählt. PDF wird nicht gespeichert", vbOKOnly, "Keine Datei ausgewählt" End If End Sub

Diagrammblätter als PDF drucken

Dieses Makro konvertiert alle Ihre Diagrammblätter in ein PDF - aber nicht Ihre Diagrammobjekte! Mit Diagrammblättern meine ich die Diagramme, die in Ihrer Liste der Tabellenkalkulationsregisterkarten eine eigene Registerkarte haben:

Sub PrintChartSheetsToPDF() 'SUBROUTINE: PrintChartSheetsToPDF 'ENTWICKLER: Ryan Wells 'BESCHREIBUNG: Alle Diagrammblätter zu einem PDF zusammenfassen Dim strSheets() As String Dim strfile As String Dim ch As Object, sh As Worksheet Dim icount As Integer Dim myfile As Variant ' Diagrammblattnamen in einem Array für jeden Kanal in ActiveWorkbook speichern.Charts ReDim Preserve strSheets(icount) strSheets(icount) = ch.Name icount = icount + 1 Nächster Kanal Wenn icount = 0 Then 'Keine Diagramme gefunden. Punch error MsgBox "Eine PDF kann nicht erstellt werden, da keine Diagrammblätter gefunden wurden.", , "Keine Diagrammblätter gefunden" Exit Sub End If 'Nach Speicherort fragen strfile = "Charts" & "_" _ & Format(Now() , "yyyymmdd_hhmmss") _ & ".pdf" strfile = ThisWorkbook.Path & "\" & strfile myfile = Application.GetSaveAsFilename _ (InitialFileName:=strfile, _ FileFilter:="PDF Files (*.pdf), *.pdf ", _ Title:="Ordner- und Dateinamen zum Speichern als PDF auswählen") If myfile "False" Then 'als PDF speichern ThisWorkbook.Sheets(strSheets).Select ActiveSheet.ExportAsFixedFormat Type:=xlTypePDF, Filename:= _ myfile, Quality:=xlQualityStandard, IncludeDocProperties:=True, _ IgnorePrintAreas:=False, OpenAfterPublish:=True Else MsgBox "Keine Datei ausgewählt. PDF wird nicht gespeichert", vbOKOnly, "Keine Datei ausgewählt" End If End Sub

Diagrammobjekte als PDF drucken

Dieses Makro speichert alle Ihre normalen Diagramme - Diagrammobjekte - in einem einzigen PDF. Unabhängig davon, auf welchem ​​Arbeitsblatt sich Ihr Diagramm befindet, wird es erfasst und als PDF gespeichert.

Im endgültigen PDF wird es nur ein Diagramm pro Seite geben.

Sub PrintChartsObjectsToPDF() 'SUBROUTINE: PrintChartsObjectsToPDF 'ENTWICKLER: Ryan Wells 'BESCHREIBUNG: Alle Diagrammobjekte in einem PDF zusammenfassen Dim ws As Worksheet, wsTemp As Worksheet Dim chrt As ChartObject Dim tp As Long Dim strfile As String Dim myfile As Variant Application.ScreenUpd = False Set wsTemp = Sheets.Add tp = 10 With wsTemp For Each ws In ActiveWorkbook.Worksheets Wenn 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 'Nach Speicherort fragen strfile = "Charts" & "_" _ & Format(Now(), "yyyymmdd\_hhmmss") _ & ".pdf" strfile = ActiveWorkbook.Path & "\" & strfile myfile = Application.GetSaveAsFilename _ (InitialFileName:=strfile, _ FileFilter:="PDF Files (*.pdf), *.pdf", _ Title:="Select Fol der und Dateiname zum Speichern als PDF") If myfile False Then 'als PDF speichern wsTemp.ExportAsFixedFormat Type:=xlTypePDF, Filename:=myfile, Quality:=xlQualityStandard, _ IncludeDocProperties:=True, IgnorePrintAreas:=False, OpenAfterPublish:= True 'Else' MsgBox "Keine Datei ausgewählt. PDF wird nicht gespeichert", vbOKOnly, "Keine Datei ausgewählt" End If Application.DisplayAlerts = False wsTemp.Delete With Application .ScreenUpdating = True .DisplayAlerts = True End With Exit Sub End Sub

Wenn Sie Fragen haben, schreiben Sie sie in den Kommentarbereich, wo Ryan und ich auf Sie warten.

Die folgenden Excel-Tutorials könnten Ihnen auch gefallen:

  • So betten Sie eine PDF-Datei in ein Excel-Arbeitsblatt ein.
  • Excel VBA-Schleifen: Für Next, Do While, Do Until, For Each (mit Beispielen).
  • So zeichnen Sie ein Makro in Excel auf
  • So kombinieren Sie mehrere Arbeitsmappen in einer Excel-Arbeitsmappe.
  • So führen Sie ein Makro in Excel aus.
  • So erstellen und verwenden Sie ein Excel-Add-In.
  • Excel VBA-Fehlerbehandlung
  • Teilen Sie jedes Excel-Blatt in separate Dateien auf
  • So importieren Sie eine XML-Datei in Excel | XML in Excel konvertieren

Über den Autor: Ryan Wells ist Nuklearingenieur und professioneller VBA-Entwickler. Er veröffentlicht seine leicht verständlichen Excel-VBA-Tutorials, um anderen beim Schreiben besserer Makros zu helfen. Ryan unterrichtet nicht nur VBA, sondern ist auch leitender Entwickler mehrerer Excel-Add-Ins. Sie finden seine Tutorials auf WellsR.com.

Sie werden die Entwicklung der Website helfen, die Seite mit Ihren Freunden teilen

wave wave wave wave wave