Live-Forum - Die aktuellen Beiträge
Anzeige
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender

Forumthread: per VBA als PDF speichern - mit Code

per VBA als PDF speichern - mit Code
Klaus
Moin Moin,
um eine Arbeitsmappe als PDF zu speichern, bemühe ich den "PDFCreator" sowie den Drucken-Dialog. _ Der Recorder gibt mir dann folgendes:

Sub Makro1()
Application.ActivePrinter = "PDFCreator auf Ne00:"
ActiveWindow.SelectedSheets.PrintOut Copies:=1, ActivePrinter:= _
"PDFCreator auf Ne00:", Collate:=True
End Sub

Nun muss ich natürlich noch von Hand den Dateinamen der PDF, den Speicherort usw angeben und auf OK drücken. Das scheint mir sehr unkomfortabel, wenn ich viele Arbeitsmappen auf verschiedene Verzeichnisse verteilt PDF-en möchte. Eine Krücke über SENDKEYS könnte ich mir zwar bauen, das scheint mir aber nicht zielführend und sehr fehleranfällig.
Meine Recherche hat folgende Lösung gefunden (Code nochmal unten angehängt)
http://www.excelguru.ca/node/21
Das könnte ich mir bestimmt auf meine Bedürfnisse umstricken - wenn es denn liefe. Bereits in der ersten Programmzeile,
Dim pdfjob As PDFCreator.clsPDFCreator
steigt mir das Beispielmakro aus mit der Fehlermeldung:
Fehler beim Kompilieren: Benutzerdefinierter Typ nicht definiert.
Woran kann das liegen? Kann jemand helfen?
Option Explicit
Sub PrintToPDF_Early()
'Author       : Ken Puls (www.excelguru.ca)
'Macro Purpose: Print to PDF file using PDFCreator
' (Download from http://sourceforge.net/  _
_
projects/pdfcreator/)
'   Designed for early bind, set reference to PDFCreator
Dim pdfjob As PDFCreator.clsPDFCreator
Dim sPDFName As String
Dim sPDFPath As String
'/// Change the output file name here! ///
sPDFName = "testPDF.pdf"
sPDFPath = ActiveWorkbook.Path & Application.PathSeparator
'Check if worksheet is empty and exit if so
If IsEmpty(ActiveSheet.UsedRange) Then Exit Sub
Set pdfjob = New PDFCreator.clsPDFCreator
With pdfjob
If .cStart("/NoProcessingAtStartup") = False Then
MsgBox "Can't initialize PDFCreator.", vbCritical + _
vbOKOnly, "PrtPDFCreator"
Exit Sub
End If
.cOption("UseAutosave") = 1
.cOption("UseAutosaveDirectory") = 1
.cOption("AutosaveDirectory") = sPDFPath
.cOption("AutosaveFilename") = sPDFName
.cOption("AutosaveFormat") = 0    ' 0 = PDF
.cClearCache
End With
'Print the document to PDF
ActiveSheet.PrintOut Copies:=1, ActivePrinter:="PDFCreator"
'Wait until the print job has entered the print queue
Do Until pdfjob.cCountOfPrintjobs = 1
DoEvents
Loop
pdfjob.cPrinterStop = False
'Wait until PDF creator is finished then release the objects
Do Until pdfjob.cCountOfPrintjobs = 0
DoEvents
Loop
pdfjob.cClose
Set pdfjob = Nothing
End Sub

Grüße,
Klaus M.vdT.
Anzeige

1
Beitrag zum Forumthread
Beitrag zu diesem Forumthread

Betreff
Benutzer
Anzeige
AW: per VBA als PDF speichern - mit Code
16.04.2010 14:23:54
Klaus
*an Kopf schlag*
circa 20 sekunden nachdem ich den Beitrag gepostet habe, kam ich darauf unter "Verweise" den PDF-Creator auch mal anzuhaken. Jetzt funktioniert der DIM natürlich.
Dafür hakt es jetzt bei
Set pdfjob = New PDFCreator.clsPDFCreator
mit der Meldung:
Laufzeitfehler '-2147319779 (8002801d)':
Automatisierungsfehler
Objektbibilotek nicht registriert.

Was ist denn eine Objektbibilotek und wo registriere ich die?
Vielen Dank,
Klaus M.vdT.
Anzeige
;

Forumthreads zu verwandten Themen

Anzeige
Entdecke relevante Threads

Schau dir verwandte Threads basierend auf dem aktuellen Thema an

Alle relevanten Threads mit Inhaltsvorschau entdecken
Anzeige
Anzeige

Infobox / Tutorial

Arbeitsmappen per VBA als PDF speichern


Schritt-für-Schritt-Anleitung

Um eine Excel-Arbeitsmappe als PDF zu speichern, kannst Du den folgenden VBA-Code verwenden. Dieser Code nutzt den PDFCreator, um die Datei direkt als PDF zu speichern.

  1. VBA-Editor öffnen: Drücke ALT + F11, um den VBA-Editor zu öffnen.

  2. Modul einfügen: Klicke im Menü auf Einfügen > Modul.

  3. Code einfügen: Kopiere den folgenden Code in das Modul:

    Option Explicit
    Sub PrintToPDF_Early()
       Dim pdfjob As PDFCreator.clsPDFCreator
       Dim sPDFName As String
       Dim sPDFPath As String
    
       sPDFName = "testPDF.pdf"
       sPDFPath = ActiveWorkbook.Path & Application.PathSeparator
    
       If IsEmpty(ActiveSheet.UsedRange) Then Exit Sub
       Set pdfjob = New PDFCreator.clsPDFCreator
    
       With pdfjob
           If .cStart("/NoProcessingAtStartup") = False Then
               MsgBox "Can't initialize PDFCreator.", vbCritical + vbOKOnly, "PrtPDFCreator"
               Exit Sub
           End If
           .cOption("UseAutosave") = 1
           .cOption("UseAutosaveDirectory") = 1
           .cOption("AutosaveDirectory") = sPDFPath
           .cOption("AutosaveFilename") = sPDFName
           .cOption("AutosaveFormat") = 0    ' 0 = PDF
           .cClearCache
       End With
    
       ActiveSheet.PrintOut Copies:=1, ActivePrinter:="PDFCreator"
    
       Do Until pdfjob.cCountOfPrintjobs = 1
           DoEvents
       Loop
       pdfjob.cPrinterStop = False
    
       Do Until pdfjob.cCountOfPrintjobs = 0
           DoEvents
       Loop
       pdfjob.cClose
       Set pdfjob = Nothing
    End Sub
  4. PDFCreator Referenz hinzufügen: Gehe zu Extras > Verweise und aktiviere die PDFCreator-Bibliothek.

  5. Makro ausführen: Drücke F5, um das Makro auszuführen. Die Arbeitsmappe wird als PDF gespeichert.


Häufige Fehler und Lösungen

  • Fehler beim Kompilieren: Benutzerdefinierter Typ nicht definiert:

    • Stelle sicher, dass Du die PDFCreator-Bibliothek unter Verweise aktiviert hast.
  • Laufzeitfehler '-2147319779 (8002801d)': Automatisierungsfehler:

    • Dieser Fehler tritt auf, wenn die Objektbibliothek nicht registriert ist. Registriere die PDFCreator-Bibliothek erneut, indem Du die Setup-Datei von der offiziellen Website herunterlädst und installierst.

Alternative Methoden

Falls der PDFCreator nicht verfügbar ist, kannst Du auch die integrierte Excel-Funktion nutzen:

  1. Gehe zu Datei > Speichern unter.
  2. Wähle im Dateityp PDF aus.
  3. Speichere die Datei.

Diese Methode ist jedoch nicht automatisiert und eignet sich weniger für das Speichern mehrerer Arbeitsmappen.


Praktische Beispiele

Wenn Du mehrere JPEGs in ein PDF zusammenführen möchtest, kannst Du dafür spezielle Tools oder andere VBA-Skripte verwenden, die die Funktionalität unterstützen, mehrere JPGs in ein PDF zu speichern. Alternativ könntest Du auch Serienbriefe als PDF speichern, indem Du die gleiche PrintToPDF-Funktion anwendest.


Tipps für Profis

  • Automatisierung: Wenn Du regelmäßig mehrere Arbeitsmappen als PDF speichern musst, kombiniere den obigen Code mit einer Schleife, die durch die Arbeitsmappen iteriert.

  • Benutzerdefinierte Dateinamen: Passe den Dateinamen dynamisch an, indem Du z.B. das aktuelle Datum oder den Arbeitsmappennamen in den sPDFName-Wert einfügst.

sPDFName = ActiveWorkbook.Name & "_" & Format(Now(), "yyyy-mm-dd") & ".pdf"

FAQ: Häufige Fragen

1. Wo finde ich die Excel VBA-Dokumentation für PDF?
Die Excel VBA-Dokumentation für PDF findest Du auf der offiziellen Microsoft-Website oder in der Excel-Hilfe.

2. Kann ich mit VBA auch Word-Dokumente als PDF speichern?
Ja, Du kannst mit VBA auch Word-Dokumente als PDF speichern. Verwende dazu den Befehl ActiveDocument.ExportAsFixedFormat.

3. Gibt es eine Möglichkeit, alle Seiten eines Excel-Dokuments in einer PDF-Datei zu speichern?
Ja, nutze den Befehl ActiveSheet.PrintOut, um alle Seiten des Arbeitsblatts in einer einzigen PDF-Datei zu speichern.

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Entdecke mehr
Finde genau, was du suchst

Die erweiterte Suchfunktion hilft dir, gezielt die besten Antworten zu finden

Suche nach den besten Antworten
Unsere beliebtesten Threads

Entdecke unsere meistgeklickten Beiträge in der Google Suche

Top 100 Threads jetzt ansehen
Anzeige