Excel VBA Tabellenblatt als PDF exportieren

Wer viel mit Microsoft Office und Excel arbeitet, kommt manchmal an einen Punkt, wo eine Massenbearbeitung erforderlich ist. Eine solche Massenbearbeitung kann auch das Exportieren eines bzw. mehrerer Excel-Tabellenblätter als PDF-Datei sein.

Klassischer Weise würde man in neueren Excel-Versionen über den Dialog Datei => Exportieren => PDF/XPS-Dokument erstellen gehen.

Screenshot Klassische Vorgehensweise zum PDF-Export in Excel
Herkömmliche Vorgehensweise für den PDF-Export in Excel

Diese Vorgehensweise kommt aber schnell an ihre Grenzen, wenn man Exceldateien hat, welche 30 und mehr Tabellenblätter beinhalten.

VBA Code PDF-Export

Mittels VBA lässt sich das sehr gut automatisieren und damit viel Zeit sparen. Mit VBA nutzt man einen der großen Vorteile von Microsoft Office, was andere Office-Programme in dieser ausgereiften Form nicht bieten. Und außerdem sind auch noch uralte VBA-Skripte kompatibel mit neueren Office-Versionen.

Den folgenden VBA-Code verwendet man um mehrere Tabellenblätter einer Exceldatei zu durchlaufen. Den Befehl WsTab.Activate muss man nicht zwingend verwenden. Dieser ruft jedes Tabellenblatt einzeln auf. So kann man schön zuschauen, macht den eigentlichen Export aber etwas langsamer.

Public Sub ExportEverySheetAsPDF()
Dim WsTab As Worksheet
For Each WsTab In Sheets
    WsTab.Activate
    PDF_Print_Sheet
Next WsTab
End Sub

Die Funktion PDF_Print_Sheet im oben genannten Code übernimmt dem eigentlichen PDF-Export. Damit das klappt, muss man die Funktion wie folgt implementieren:

Private Sub PDF_Print_Sheet()
    ActiveSheet.ExportAsFixedFormat Type:=xlTypePDF, Filename:= _
    "c:\Users\User\Desktop\" & ActiveSheet.Name & ".pdf", Quality:=xlQualityStandard, _
    IncludeDocProperties:=True, IgnorePrintAreas:=False, OpenAfterPublish:= _
    True
End Sub

Innerhalb dieser Funktion muss noch individuell Speicherort (c:\Users\User\Desktop*) angepasst werden, wo die PDF-Dateien gespeichert werden sollen. Als Dateiname wird im obigen Beispiel der jeweilige Name des Tabellenblatts (ActiveSheet.Name*) verwendet.

Möchte man individuelle Dateinamen für die PDF-Files vergeben, oder differenzierte Speicherorte oder wenn man auch auf WsTab.Activate verzichten will, dann muss man die Funktion PDF_Print_Sheet() um entsprechende Übergabeparameter anpassen.

[Datum: 22.05.2020]