Anzeige
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Inhaltsverzeichnis

PDF Printer via VBA anwählen

Forumthread: PDF Printer via VBA anwählen

PDF Printer via VBA anwählen
04.09.2008 14:48:00
Henner
Hi,
ich möchte aus einer UserForm heraus eine Tabelle als PDF 'drucken', habe FreePDF installiert. Dafür habe ich einem Button in der UF das folgende Makro zugewiesen:

Sub print_pdf()
Sheets("print").Select
Application.ActivePrinter = "FreePDF XP auf Ne02:"
ActiveWindow.SelectedSheets.PrintOut Copies:=1, ActivePrinter:= _
"FreePDF XP auf Ne02:", Collate:=True
Application.ActivePrinter = "Brother DCP-315CN USB Printer auf Ne04:"
End Sub


Das Problem ist nun, dass FreePDF vor dem Erzeugen der PDF den Speicherort und den Dateinamen abfragt. Das möchte ich in das Makro oder via VBA mit einbinden, so dass der Zielpfad zum Speichern der Datei aus der TextBox1 in der UF ausgelesen wird und der Dateiname aus der Zelle A1 in der Tabelle 'Data'.
Im Vorraus vielen Dank für Eure Vorschlage!
Gruß Henner

Anzeige

5
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: PDF Printer via VBA anwählen
04.09.2008 19:45:00
Henner
Hallo Rainer,
da ich versuchen möchte das Erzeugen von PDFs ohne das Installieren zusätzlicher Software zu realisieren, stelle ich die Möglichkeit mit (Free PDF Multidoc) erstmal hinten an. Allerdings habe ich in dem Thread einen anderen Code gefunden:

Sub PDF_drucken
Dim strAktuellerDrucker As String
strAktuellerDrucker = Application.ActivePrinter
Worksheets("Rechnung").PrintOut ActivePrinter:="FreePDF auf Ne06:",_
PrintToFile:=True, PrToFileName:="C:\test.ps"
Shell ("c:\programme\freepdf_xp\freepdf.exe C:\test.ps /a /d /x")_
Application.ActivePrinter = strAktuellerDrucker
End Sub


Das Makro erstellt in C:\ die Datei "test.ps" und ruft dann FreePDF auf.
Die PDF-Datei "test.pdf" wird im Hintergrund erstellt, ebenfalls in c:\.
Die Parameter von FreePDF:
/a erstellt "test.pdf"
/d löscht "test.ps"
/x beendet FreePDF
Habe den Code mal angepasst, sprich 'FreePDF auf Ne06' geändert auf 'FreePDF auf Ne02' (siehe mein erster Beitrag) und einem Button zugewiesen. Bei Klick auf den Button werden die Zeilen 3,4 und 5 rot eingefärbt und ich bekomme die Fehlermeldung Fehler beim Kompilieren; Syntaxfehler.
Hoffe mir ist noch zu helfen, hab die Mappe hier nochmal hochgeladen:
https://www.herber.de/bbs/user/55197.xls

Anzeige
AW: PDF Printer via VBA anwählen
04.09.2008 20:14:00
Ramses
Hallo
Die Zeilenumbruchzeichen "_" waren nicht korrekt gesetzt
So sollte es gehen
Sub PDF_drucken()
    Dim strAktuellerDrucker As String
    strAktuellerDrucker = Application.ActivePrinter
    Worksheets("Rechnung").PrintOut ActivePrinter:="FreePDF auf Ne06:", _
    PrintToFile:=True, PrToFileName:="C:\test.ps"
    Shell ("c:\programme\freepdf_xp\freepdf.exe C:\test.ps /a /d /x")
    Application.ActivePrinter = strAktuellerDrucker
End Sub

Gruss Rainer
Anzeige
AW: PDF Printer via VBA anwählen
04.09.2008 20:52:00
Henner
Sieht soweit schonmal ganz gut aus, jetzt kommt allerdings ne Fehlermeldung von FreePDF:
GhostScript error! As a possible solution, try to reinstall GhostScript.
Error, no PDF file produced!
Gruß Henner
AW: PDF Printer via VBA anwählen
04.09.2008 21:57:01
Ramses
Hallo
Keine Ahnung, da musst du in eiem "FreePdf"-Forum fragen.
Gruss Rainer
Anzeige
;

Forumthreads zu verwandten Themen

Anzeige
Anzeige
Anzeige
Anzeige
Entdecke relevante Threads

Schau dir verwandte Threads basierend auf dem aktuellen Thema an

Alle relevanten Threads mit Inhaltsvorschau entdecken
Anzeige

Infobox / Tutorial

PDF-Drucken mit VBA und FreePDF


Schritt-für-Schritt-Anleitung

  1. VBA-Entwicklungsumgebung öffnen: Drücke ALT + F11, um die VBA-Entwicklungsumgebung in Excel zu öffnen.

  2. Neues Modul erstellen: Klicke mit der rechten Maustaste auf "VBAProject (DeineMappe)", wähle "Einfügen" und dann "Modul".

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

    Sub print_pdf()
        Dim strAktuellerDrucker As String
        strAktuellerDrucker = Application.ActivePrinter
        Application.ActivePrinter = "FreePDF XP auf Ne02:"
    
        ' Datei speichern
        ActiveWindow.SelectedSheets.PrintOut Copies:=1, ActivePrinter:= _
            "FreePDF XP auf Ne02:", Collate:=True
    
        ' Zurück zum ursprünglichen Drucker
        Application.ActivePrinter = strAktuellerDrucker
    End Sub
  4. Drucker auswählen: Stelle sicher, dass du den richtigen Druckernamen in Application.ActivePrinter verwendest. Für "Microsoft Print to PDF" kannst du den Namen entsprechend anpassen.

  5. Makro ausführen: Gehe zurück zu Excel, weise das Makro einem Button zu und teste es.


Häufige Fehler und Lösungen

  • Fehler beim Kompilieren: Überprüfe, ob alle Zeilen korrekt formatiert sind. Achte auf Zeilenumbruchzeichen _, die nicht richtig gesetzt sind.

  • GhostScript Error: Dieser Fehler tritt auf, wenn GhostScript nicht korrekt installiert ist. Stelle sicher, dass es auf deinem Rechner installiert ist. Gehe zu GhostScript für die Installation.

  • Freigabe von FreePDF: Wenn FreePDF beim Speichern nach einem Dateinamen fragt, musst du den PrToFileName Parameter in deinem Makro anpassen, um den Dateipfad und -namen festzulegen.


Alternative Methoden

  • Microsoft Print to PDF: Du kannst die Microsoft Print to PDF-Funktion anstelle von FreePDF verwenden. Ändere einfach den Druckernamen im Makro:

    Application.ActivePrinter = "Microsoft Print to PDF"
  • FreePDF Multidoc: Eine Alternative ist die Verwendung von FreePDF Multidoc, wenn du mehrere PDF-Dokumente gleichzeitig erstellen möchtest.


Praktische Beispiele

  1. PDF aus einer UserForm drucken: Um die Datei in einem bestimmten Pfad zu speichern, kannst du folgenden Code verwenden:

    Sub UserFormPrintPDF()
        Dim strPfad As String
        strPfad = UserForm1.TextBox1.Value & "\" & Worksheets("Data").Range("A1").Value & ".pdf"
    
        Application.ActivePrinter = "FreePDF XP auf Ne02:"
        ActiveSheet.PrintOut ActivePrinter:="FreePDF XP auf Ne02:", PrintToFile:=True, PrToFileName:=strPfad
    End Sub
  2. Kennwortgeschützte PDF drucken: Wenn du eine kennwortgeschützte PDF erstellen möchtest, überprüfe die Einstellungen in FreePDF und passe die Parameter im Code entsprechend an.


Tipps für Profis

  • Fehlerbehandlung im Makro: Implementiere On Error Resume Next und On Error GoTo 0, um Fehler innerhalb des Makros zu handhaben.

  • Makros automatisieren: Nutze Workbook_Open oder Worksheet_Change, um das Drucken automatisch auszulösen, wenn bestimmte Bedingungen erfüllt sind.

  • Drucker verwalten: Verwende Application.Printer anstelle von Application.ActivePrinter, um Druckerobjekte zu verwalten.


FAQ: Häufige Fragen

1. Wie kann ich den Drucker wechseln?
Du kannst den Druckernamen in der Zeile Application.ActivePrinter anpassen. Ersetze "FreePDF XP auf Ne02:" mit dem Namen deines gewünschten Druckers.

2. Funktioniert das auch in Excel 2016?
Ja, die beschriebenen Methoden und VBA-Codes funktionieren in Excel 2016 sowie in späteren Versionen. Achte darauf, dass die Drucker korrekt installiert sind.

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