Website-Icon eKiwi-Blog.de

VBA E-Mail pdf-Anhang drucken

VBA - Visual Basic for Application

Outlook hält bereits viele Funktionen bereit, mit welchen sich bestimmte Aufgaben automatisieren bzw. vereinfachen lassen. Dazu zählen unter anderem die Outlook-Regeln.
Jedoch gibt es aber nicht für alle Aufgaben eine passende Funktion. Dafür kann man aber in Mircosofts Outlook VBA (Visual Basic for Applications) benutzen, um flexibel eigene Funktionen zu programmieren und Arbeitsabläufe anzupassen. Dies können die wenigsten anderen E-Mail-Programme vorweisen.

Will man einen PDF-Anhang aus einer E-Mail heraus drucken, dann öffnet man meistens die PDF-Datei im Adobe Reader und hangelt sich dort zum Drucken-Menü vor. Das sind bei wiederkehrenden Aufgaben unnötig viele Klicks. Und meistens sind noch andere Arbeitsabläufe damit verbunden, wie das Speichern des E-Mail Anhang unter einem bestimmten Pfad.

Ein typischer routinemäßiger Arbeitsprozess kann hier sein, dass man per Mail eine Rechnung erhält. Diese möchte man für die Buchhaltung unter einem bestimmten Pfad speichern und dann gleichzeitig auf den Drucker schicken.

Bestseller Nr. 1

PDF-Datei aus E-Mail automatisch Drucken

Das Drucken einer PDF-Datei, die als Anhang einer E-Mail beigefügt ist, kann man über den folgenden VBA-Code vornehmen. Mittels diesem VBA-Code werden alle PDF-Anhänge der ausgewählten E-Mails auf den Standard-Drucker gesendet.

Zum VBA-Editor gelangt man über die Tastenkombination Strg+F11 oder über die Registerkarte Entwicklertools ⇒ Visual Basic. (Die Registerkarte Entwicklertools erscheint nicht standardmäßig im Outlook. Hier kann man das anpassen: Datei zu Optionen Menüband anpassen Hauptregisterkarten.)


Public Sub PrintSelectedAttachments()
  Dim Exp As Outlook.Explorer
  Dim Sel As Outlook.Selection
  Dim obj As Object
  Set Exp = Application.ActiveExplorer
  Set Sel = Exp.Selection
  For Each obj In Sel
    If TypeOf obj Is Outlook.MailItem Then
      PrintAttachments obj
    End If
  Next
End Sub

Private Sub PrintAttachments(oMail As Outlook.MailItem)
  On Error Resume Next
  Dim colAtts As Outlook.Attachments
  Dim oAtt As Outlook.Attachment
  Dim sFile As String
  Dim sFileType As String
  Dim ATTACHMENT_DIRECTORY As String

'Pfad, wo Anlage temporär zwischen gespeichert wird
ATTACHMENT_DIRECTORY = "c:\Users\MeinBenutzer\Downloads\"

  Set colAtts = oMail.Attachments

  If colAtts.Count Then
    For Each oAtt In colAtts

      sFileType = LCase$(Right$(oAtt.FileName, 4))

      Select Case sFileType
      Case ".pdf"
        sFile = ATTACHMENT_DIRECTORY & oAtt.FileName
        oAtt.SaveAsFile sFile
        ShellExecute 0, "print", sFile, vbNullString, vbNullString, 0
        'warten eine bestimmte Zeit (Millisekunden) bis Drucken abgeschlossen
        Sleep 10000
        'wenn erfolgreich gedruck, dann Datei wieder löschen
        Kill sFile
      End Select
    Next
  End If
End Sub

Wie man sieht, wird hier der Befehl ShellExecute ausgeführt. Dieser Befehl greif auf eine WinAPI zu. Dies ist notwendig, weil es sich beim Drucken um einen Dienst außerhalb der Microsoft Outlook-Umgebung handelt. Damit das Drucken der PDF-Datei funktioniert, muss man noch am Anfang des VBA-Moduls, vor dem eigenlichen Code, die folgende DLL einbinden.


Private Declare Function ShellExecute Lib "shell32.dll" Alias _
  "ShellExecuteA" (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 Declare PtrSafe Sub Sleep Lib "kernel32.dll" (ByVal dwMilliseconds As Long)

Die zweite Deklaration dient dazu die Sleep-Funktion zu deklarieren. Im Programm-Code verwenden wird dann Sleep, um eine bestimmte Zeit abzuwarten, bis die ShellExecute-Funktion das Drucken abgeschlossen hat. Die Wartezeit muss in Millisekunden angegeben werden und sollte ggf. angepasst werden, wenn der Druckvorgang länger dauert, das es sonst zu einer Fehlermeldung kommt. Danach wird der temporär gespeicherte Anhang wieder gelöscht.

VBA Makro Datei-Anhang Drucken ausführen

Nun hat man ein fertiges Makro, welches sich auch mit weiteren Makros kombinieren lässt. Um auf das Makro zuzugreifen, geht man auf Entwicklertools ⇒ Makro ⇒ Makros-Dialog. Damit das Makro hier erscheint, darf es nicht als Private deklariert sein.

Noch schöner ist, wenn man direkt über den Schnellzugriff darauf zugreifen kann. Die nachfolgenden beiden Screenshots zeigen, wie man dies bewerkstelligen kann.

Outlook Schnellzugriff Button zum Ausführen des Makros zuweisen
Befehlsart Makros auswählen und entsprechendes Makro der Symbolleiste für den Schnellzugriff zuweisen

Über den Ändern-Button kann man dann seinem Makro noch ein eigens Icon und einen eigenen passenden Text zuweisen.

AngebotBestseller Nr. 1
Microsoft 365 Single | 12 Monate, 1 Nutzer | Word,...
  • Für eine Person
  • auf bis zu 5 Geräten gleichzeitig nutzen
  • funktioniert auf PC, Mac, iPhone, iPad und Android-Smartphones und -Tablets
Die mobile Version verlassen