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

Forumthread: PDF Drucken VBA

PDF Drucken VBA
30.09.2019 10:39:08
Sabine
Hallo Herbers,
folgenden Code habe ich mir aus dem Forum herausgesucht:
Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
Dim Datei As String, NeuDatei As String, Pfad As String, NeuPfad As String
Dim strOff As String, Ext As String
If Target.Column = 4 Then
If Target  "" Then
Ext = ".pdf"
strOff = "\123\4567 789\"
Pfad = ThisWorkbook.Path
Datei = Target
NeuPfad = Left(Pfad, InStrRev(Pfad, "\") - 1) & strOff
If Dir(NeuPfad, vbDirectory)  "" Then
NeuDatei = NeuPfad & Datei & Ext
If Dir(NeuDatei)  "" Then
'  ActiveWorkbook.FollowHyperlink NeuPfad & Datei & Ext
'-> Hier müsste anstatt des Hyperlinks der Befehl rein 
Ich würde gern mittels eines Doppelklickbefehles die PDF (öffnen und) ausdrucken.. Habe im Netz nicht wirklich etwas nützliches gefunden...
Vielen Dank im voraus..
Gruß
Sabine
Anzeige

6
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: PDF Drucken VBA
30.09.2019 11:10:27
ChrisL
Hi Sabine
Ich habe mir da kürzlich was aus dem Netz kopiert und leicht modifiziert. (die Quelle weiss ich leider nicht mehr)
Range("B1") müsstest du durch deinen Pfad ersetzen.
Wenn die PDF unterschiedliche Länge haben und wenn die Reihenfolge relevant ist, dann müsstest du ggf. eine zeitliche Verzögerung (Wait) um 1-2 Sekunden einbauen. Ansonsten kommt die Reihenfolge durcheinander (kleine Dokumente "überholen" längere Dokumente).
Zudem müsstest du bei grossen Stapelverarbeitungen den "Sleep-Modus" von Windows deaktivieren. Der Prozess unterbricht sonst.
cu
Chris
Private Declare

Function ShellExecuteA Lib "shell32.dll" ( _
ByVal hwnd As Long, ByVal lpOperation As String, _
ByVal lpFile As String, ByVal lpParameters As String, _
ByVal lpDirectory As String, ByVal nShowCmd As Long _
) As Long

Sub prcPrint_PDF()
Dim strPath As String
Dim FSO As Object, F1 As Object
strPath = Tabelle1.Range("B1")
If Right(strPath, 1)  "\" Then strPath = strPath & "\"
Set FSO = CreateObject("Scripting.FileSystemObject")
Set FSO = FSO.Getfolder(strPath)
If Not MsgBox(FSO.Files.Count & " Dateien werden auf den Standard-/Default-Drucker ausgegeben.", _
vbInformation + vbYesNo) = vbYes Then Exit Sub
For Each F1 In FSO.Files
If LCase(CStr(F1.Path)) Like "*.pdf" Then
ShellExecuteA 0&, "Print", F1.Path, vbNullString, vbNullString, 0
End If
Next F1
End Sub

Anzeige
AW: PDF Drucken VBA
30.09.2019 11:28:16
Sabine
Hallo Chris,
2 Fragen erstmal
An welche Stelle füge ich die "private Declare" ein? direkt vor meinem doubleclick-Befehl?
kann ich dann auch "strPath=NeuPfad & Datei & Ext" als Pfad verwenden für mein Code?
Vielen dank für deine Mühen.
Gruß
AW: PDF Drucken VBA
30.09.2019 11:36:11
ChrisL
Hi
Ja das wäre ein guter Start :)
Falls es nicht geht, versuch ein Standardmodul.
Die Stapelverarbeitung ist in deinem Fall irrelevant (meine Bemerkungen und FSO im Code kannst du ignorieren). Eigentlich brauchst du nur die Funktion und den ShellExecute Befehl.
cu
Chris
Anzeige
leider funktioniert es so bei mir nicht
30.09.2019 12:00:12
Sabine
Hab jetzt es jetzt hin und her versucht. Aber leider ist die Deklaration nicht erfolgreich weil sie sich auch jedesmal rot färbt sobald ich diese einfüge. So ist der aktuelle Code:
Private Declare
Function ShellExecuteA Lib "shell32.dll" ( _
ByVal hwnd As Long, ByVal lpOperation As String, _
ByVal lpFile As String, ByVal lpParameters As String, _
ByVal lpDirectory As String, ByVal nShowCmd As Long _
) As Long
Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
Dim Datei As String, NeuDatei As String, Pfad As String, NeuPfad As String
Dim strOff As String, Ext As String
If Target.Column = 4 Then
If Target "" Then
Ext = ".pdf"
strOff = "\123\456 789\"
Pfad = ThisWorkbook.Path
Datei = Target
NeuPfad = Left(Pfad, InStrRev(Pfad, "\") - 1) & strOff
If Dir(NeuPfad, vbDirectory) "" Then
NeuDatei = NeuPfad & Datei & Ext
If Dir(NeuDatei) "" Then
Call ShellExecute(0, "print", NeuPfad & Datei & Ext, "", "", nShowCmd)
Else
MsgBox NeuDatei & " NICHT gefunden", vbCritical
End If
Else
MsgBox "Pfad nicht gefunden", vbCritical
End If
End If
End If
End If
Anzeige
AW: leider funktioniert es so bei mir nicht
30.09.2019 12:36:00
ChrisL
die Darstellung im Forum war etwas unglücklich...
Private Declare Function ShellExecuteA Lib "shell32.dll" ( _
ByVal hwnd As Long, ByVal lpOperation As String, _
ByVal lpFile As String, ByVal lpParameters As String, _
ByVal lpDirectory As String, ByVal nShowCmd As Long _
) As Long

Anzeige
AW: leider funktioniert es so bei mir nicht
30.09.2019 15:18:33
Sabine
Ahhh..
Jetzt passt alles. Vielen Dank.
;

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
Anzeige

Infobox / Tutorial

PDF Drucken mit VBA in Excel


Schritt-für-Schritt-Anleitung

Um mit VBA in Excel PDF-Dokumente zu drucken, folge diesen Schritten:

  1. Öffne den VBA-Editor: Drücke ALT + F11 in Excel.

  2. Füge ein neues Modul hinzu: Rechtsklicke auf "VBAProject (DeineArbeitsmappe)", wähle „Einfügen“ und dann „Modul“.

  3. Füge den folgenden Code ein:

    Private Declare Function ShellExecuteA Lib "shell32.dll" ( _
       ByVal hwnd As Long, ByVal lpOperation As String, _
       ByVal lpFile As String, ByVal lpParameters As String, _
       ByVal lpDirectory As String, ByVal nShowCmd As Long _
    ) As Long
    
    Sub prcPrint_PDF()
       Dim strPath As String
       Dim FSO As Object, F1 As Object
       strPath = Tabelle1.Range("B1")
       If Right(strPath, 1) <> "\" Then strPath = strPath & "\"
       Set FSO = CreateObject("Scripting.FileSystemObject")
       Set FSO = FSO.Getfolder(strPath)
       If Not MsgBox(FSO.Files.Count & " Dateien werden auf den Standard-/Default-Drucker ausgegeben.", _
           vbInformation + vbYesNo) = vbYes Then Exit Sub
       For Each F1 In FSO.Files
           If LCase(CStr(F1.Path)) Like "*.pdf" Then
               ShellExecuteA 0, "Print", F1.Path, vbNullString, vbNullString, 0
           End If
       Next F1
    End Sub
  4. Schließe den VBA-Editor und kehre zu Excel zurück.

  5. Definiere den Pfad in einer Zelle (z.B. B1) der Tabelle, in der die PDFs gespeichert sind.

  6. Führe das Makro aus: Gehe zu „Entwicklertools“ > „Makros“ und wähle prcPrint_PDF aus.

Wenn du den Doppelklick-Befehl einfügen möchtest, kannst du den Code in das entsprechende Arbeitsblattmodul kopieren.


Häufige Fehler und Lösungen

  • Fehler: „pdf nicht druckbar“
    Stelle sicher, dass der Pfad zur PDF-Datei korrekt ist und die Datei existiert.

  • Fehler: „pdf druck gesperrt“
    Überprüfe, ob die Datei passwortgeschützt ist. In diesem Fall musst du ein Tool verwenden, das passwortgeschützte PDFs drucken kann.

  • Fehler: Deklaration nicht erfolgreich
    Die Private Declare-Anweisung sollte direkt vor der Sub-Prozedur stehen. Achte darauf, dass die Syntax korrekt ist.


Alternative Methoden

  • Direktes Drucken über Adobe Reader: Du kannst das PDF manuell über Adobe Reader öffnen und drucken. Dies ist nützlich, wenn du nur gelegentlich eine PDF drucken möchtest.

  • Drucken mit PowerShell: Wenn du mehrere PDFs drucken möchtest, könntest du auch ein PowerShell-Skript verwenden.


Praktische Beispiele

  • PDF bestimmten Bereich drucken: Um nur einen bestimmten Bereich einer PDF zu drucken, benötigst du ein externes Tool oder eine entsprechende Funktion in deiner Drucksoftware.

  • Mehrere PDFs drucken: Der obige Code druckt alle PDFs im angegebenen Verzeichnis. Achte darauf, dass sie in der gewünschten Reihenfolge sind.

For Each F1 In FSO.Files
    If LCase(CStr(F1.Path)) Like "*.pdf" Then
        ShellExecuteA 0, "Print", F1.Path, vbNullString, vbNullString, 0
    End If
Next F1

Tipps für Profis

  • Wartezeiten einfügen: Wenn du große Dokumente druckst, kann es hilfreich sein, eine Wartezeit (Sleep) zwischen den Druckaufträgen einzufügen, um sicherzustellen, dass sie in der richtigen Reihenfolge verarbeitet werden.

  • Fehlerbehandlung: Füge eine Fehlerbehandlungsroutine in deinen Code ein, um unerwartete Fehler abzufangen, die während des Druckvorgangs auftreten können.

On Error GoTo ErrorHandler
' Dein Druckcode hier
Exit Sub
ErrorHandler:
    MsgBox "Ein Fehler ist aufgetreten: " & Err.Description

FAQ: Häufige Fragen

1. Wie kann ich passwortgeschützte PDFs drucken?
Um passwortgeschützte PDFs zu drucken, musst du sicherstellen, dass du das Passwort kennst oder ein Tool verwenden, das dies unterstützt.

2. Kann ich den Druckbereich anpassen?
Ja, um einen bestimmten Bereich einer PDF zu drucken, benötigst du jedoch spezifische Software-Funktionen, die über Excel hinausgehen. Excel selbst bietet keine Möglichkeit, den Druckbereich für PDFs festzulegen.

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