Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1792to1796
Aktuelles Verzeichnis
Verzeichnis Index
Übersicht Verzeichnisse
Vorheriger Thread
Rückwärts Blättern
Nächster Thread
Vorwärts blättern
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Inhaltsverzeichnis

Mailanhänge ausdrucken

Mailanhänge ausdrucken
13.11.2020 10:52:32
Rolf
Liebes Forum
Mit folgendem Code drucke ich eine geöffnete email (Outlook) aus.

Private Sub CBAnfragemaildrucken_Click()
Dim olApp As Object                               'AktMail As Object,
Set olApp = CreateObject("Outlook.Application")   'OutlookVerweis
If Not olApp.ActiveInspector Is Nothing Then      'Pruefung auf offene Mail
With olApp.ActiveInspector.CurrentItem()
.PrintOut                                 'Aktuelle Mail drucken
End With
Else
MsgBox "Es gibt keine offene Mail zum Drucken"
End If
Set olApp = Nothing
End Sub

Ich möchte nun aber, dass er mir nicht nur die Mail, sondern auch die pdf Anhänge druckt.
Wie muss ich meinen Code ergänzen? Kann mir dabei jemand helfen?
Vielen Dank und Gruss
Rolf

12
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Mailanhänge ausdrucken
13.11.2020 11:13:51
Nepumuk
Hallo Rolf,
das geht so nicht weil der Anhang keinen Pfad hat. Der existiert nur in der .pst-DB. Ich müsste den Anhang also erst speichern. Wäre das ok?
Gruß
Nepumuk
AW: Mailanhänge ausdrucken
13.11.2020 12:02:27
Rolf
Hallo Nepomuk
Vielen Dank für deine Info. Das wäre sogar sehr erwünscht, wenn ich den Anhang extrahieren und speichern könnte.
Kannst du da helfen?
Liebe Grüsse
Rolf
AW: Mailanhänge ausdrucken
13.11.2020 12:10:07
Nepumuk
Hallo Rolf,
teste mal:
Option Explicit

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

Private Const SW_HIDE As Long = 0

Private Sub CBAnfragemaildrucken_Click()
    
    Dim olApp As Object, objAttachment As Object 'AktMail As Object,
    Dim strPath As String
    
    Set olApp = CreateObject(Class:="Outlook.Application") 'OutlookVerweis
    
    If Not olApp.ActiveInspector Is Nothing Then 'Pruefung auf offene Mail
        
        With olApp.ActiveInspector.CurrentItem()
            
            .PrintOut 'Aktuelle Mail drucken
            
            For Each objAttachment In .Attachments
                
                With objAttachment
                    
                    strPath = Environ$("tmp") & "\" & .Filename
                    
                    Call .SaveAsFile(strPath)
                    
                    Call ShellExecuteA(Application.hwnd, "PRINT", strPath, vbNullString, vbNullString, SW_HIDE)
                    
                    Call Kill(PathName:=strPath)
                    
                End With
            Next
        End With
        
    Else
        MsgBox "Es gibt keine offene Mail zum Drucken"
    End If
    
    Set olApp = Nothing
    
End Sub

Gruß
Nepumuk
Anzeige
AW: Mailanhänge ausdrucken
13.11.2020 13:53:13
Rolf
Hallo Nepomuk
Vielen Dank für den Code. Es funktioniert, allerdings nur wenn ich den Kill befehl deaktiviere.
Weiss nicht ob es dafür plausible Gründe gibt. Denke aber, dass ich die Datei auch später dann noch löschen kann.
Gruss Rolf
AW: Mailanhänge ausdrucken
13.11.2020 14:09:58
keinplan
der grund ist das shellexecute asyncron operiert, d.h. es wird ein eigenständiger prozess gestartet der u.u etwas zeit zur abarbeitung benötigt, vba aber darauf nicht wartet und mit der nächsten zeile weitermacht. da aber der noch nicht abgeschlossene prozess diese datei gesperrt hat kann sie mit kill nicht gelöscht werden.
AW: Mailanhänge ausdrucken
13.11.2020 14:10:16
Nepumuk
Hallo Rolf,
könnte sein, dass das löschen schneller erfolgt als das drucken. Soll ich das zeitverzögert erledigen?
Gruß
Nepumuk
Anzeige
AW: Mailanhänge ausdrucken
13.11.2020 14:23:12
Rolf
Hallo Nepomuk
Sehr gerne ja.
Gruss Rolf
AW: Mailanhänge ausdrucken
13.11.2020 14:51:34
Nepumuk
Hallo Rolf,
teste mal:
Option Explicit

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

Private Const SW_HIDE As Long = 0

Private Sub CBAnfragemaildrucken_Click()
    
    Dim olApp As Object, objAttachment As Object 'AktMail As Object,
    Dim strPath As String
    
    Set olApp = CreateObject(Class:="Outlook.Application") 'OutlookVerweis
    
    If Not olApp.ActiveInspector Is Nothing Then 'Pruefung auf offene Mail
        
        With olApp.ActiveInspector.CurrentItem()
            
            .PrintOut 'Aktuelle Mail drucken
            
            For Each objAttachment In .Attachments
                
                With objAttachment
                    
                    strPath = Environ$("tmp") & "\" & .Filename
                    
                    Call .SaveAsFile(strPath)
                    
                    Call ShellExecuteA(Application.hwnd, "PRINT", strPath, vbNullString, vbNullString, SW_HIDE)
                    
                    Call Application.OnTime(EarliestTime:=Now + TimeSerial(0, 0, 10), _
                        Procedure:="'KillFile """ & strPath & """'", Schedule:=True)
                    
                End With
            Next
        End With
        
    Else
        MsgBox "Es gibt keine offene Mail zum Drucken"
    End If
    
    Set olApp = Nothing
    
End Sub

Private Sub KillFile(ByVal pvstrPath As String)
    Call Kill(PathName:=pvstrPath)
End Sub


Gruß
Nepumuk
Anzeige
AW: Mailanhänge ausdrucken
13.11.2020 15:13:39
Rolf
Hallo Nepomuk
Das scheint zu funktionieren. Vielen vielen Dank.
Darf ich dich hierzu noch um deine Meinung bitten:
Ist es möglich nur pdf Datein zu drucken? als keine jpg xlsx und sonstiges.
und kann man die Druckorientierung irgendwo steuern? jetzt wird beispielsweise ein pdf im Querformat
quer auf ein A4 hoch gedruckt.
Liebe Grüsse und ein schönes Wochenende
Rolf
AW: Mailanhänge ausdrucken
13.11.2020 16:55:16
Rolf
Hallo Nepomuk
Bei mir kommt nun die Fehlermeldung dass das Makro KillFile nicht ausgeführt werden kann, weil es in dieser Arbeitsmappe nicht verfügbar sei oder alle Makros wurden deaktiviert.
Woran kann das liegen?
Gruss Rolf
Anzeige
AW: Mailanhänge ausdrucken
13.11.2020 16:58:43
Nepumuk
Hallo Rolf,
kann ich momentan nicht nachvollziehen. Schauen wir morgen nochmal.
Gruß
Nepumuk
AW: Mailanhänge ausdrucken
13.11.2020 17:33:48
Nepumuk
Hallo Rolf,
kopiere die Prozedur:
Public Sub KillFile(ByVal pvstrPath As String)
    Call Kill(PathName:=pvstrPath)
End Sub

in ein Standardmodul (Menüleiste in VBA-Editor - Einfügen - Modul).
Gruß
Nepumuk
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige