Microsoft Outlook troubleshooting

Coraz częściej spotykamy się z wiadomościami email, w których załączone są dokumenty w formacie PDF. W większości przedsiębiorstw wymaga się, aby pliki takie zostały wydrukowane i dołączone w formie papierowej do tradycyjnego archiwum dokumentów (np. w dziale księgowości). Jak jednak wydrukować wiadomość z załącznikiem PDF?

MS Outlook po wybraniu opcji drukowania ogranicza się jedynie do wydrukowania treści wiadomości. Lecz co z załącznikami? Zwykle należy je otworzyć i wydrukować osobno.

Poniżej przedstawiony kod makra umożliwia automatyzację powyższych działań i to nawet bez konieczności otwierania emaili - wystarczy zaznaczyć wiadomości na liście w Outlooku. 

Option Explicit
Dim oMail As MailItem, item As Object
Dim oAtmt As Attachment, FileName$, x&

Sub drukuj()
'Dla wszystkich plików PDF
Call PrintPDFAttachments4SelectionEmail()
'Dla tylko tych które w nazwie zawierają słowo "faktura"
'Call PrintPDFAttachments4SelectionEmail("faktura")

For Each oMail In Application.ActiveExplorer.Selection
    oMail.PrintOut 'Można zwielokrotnić drukowanie powielając tą linię
Next
End Sub

Private Sub PrintPDFAttachments4SelectionEmail(Optional AttName$)
Dim oMail As MailItem, item As Object
Dim oAtmt As Attachment, FileName$, x&

    If FileExists("C:\Temp") = False Then MkDir "C:\Temp"
    On Error GoTo blad
    
    For Each item In Application.ActiveExplorer.Selection
        If item.Class = 43 Then
            Set oMail = item
            If oMail.Attachments.Count > 0 Then
                For Each oAtmt In oMail.Attachments
                    If Len(AttName) = 0 Then
ones:
                        FileName = "C:\Temp\" & oAtmt.FileName
                        If FileExists(FileName) = True Then Kill FileName 'lub odpytanie komendą MSGBOX z parametrem.
                        oAtmt.SaveAsFile FileName
                        If Right$(UCase(oAtmt.FileName), 3) = "PDF" Then
                            Shell """c:\Program Files (x86)\Adobe\Reader 9.0\Reader\acrord32.exe"" /h /p """ + FileName + """", vbHide
                        End If
                    Else
                        If InStr(1, UCase(oAtmt.FileName), UCase(AttName)) > 0 Then GoTo ones
                    End If
                Next oAtmt
            End If
        End If
    Next item
Exit Sub
blad:
MsgBox Err.Number & vbCr & Err.Description, vbExclamation, "O'Shon from VBATools.pl"
End Sub
Private Function FileExists(FilePath As String) As Boolean
On Error GoTo blad
    FileExists = Len(Dir(FilePath, vbDirectory Or vbHidden Or vbSystem)) > 0
Exit Function
blad:
FileExists = False
End Function

Ze względu na możliwość instalacji programu Acrobat Reader w różnych miejscach na dysku twardym należy w kodzie podać poprawną ścieżkę do pliku „acrord32.exe”, który domyślnie znajduje się w folderze instalacyjnym programu.
 
W przypadku problemów z samym wydrukiem pliku PDF (np. źle wyświetlane znaki specjalne), należy pamiętać, iż w konfiguracji drukarki dobrze jest ustawić opcję Drukować jako obraz w menu Drukowanie/Zaawansowane.
 
Aby uprościć pracę z makrem można je przypisać do przycisku w pasku menu lub skorzystać z automatycznego uruchamiania makra, tworząc nową regułę w kreatorze reguł dostępnym w menu Narzędzia, Reguły i alerty. 

MVP Shon Oskar – VBATools.pl
Jeśli masz pytania dot. tego artykułu zapraszam na Forum
Skonfiguruj swój pakiet dodatków do Excela, Worda, PowerPointa i Outlooka



© Wszelkie prawa zastrzeżone. Żadna część ani całość tego artykułu nie może być powielana ani publikowana bez zgody autora.

Komentarze

Komentarze
Robert j.
Robert j. 2012-10-05 11:53:32
Witam, makro to byłoby dla mnie wspaniałą pomocą, jednakże nie działa. Podałem dobry dostęp do pliku, jednakże mam taką oto informacje : "Object variable or With block variable not set" Option Explicit Dim oMail As MailItem, item As Object Dim oAtmt As Attachment, FileName$, x& Sub drukuj() 'Dla wszystkich plików PDF Call PrintPDFAttachments4SelectionEmail 'Dla tylko tych które w nazwie zawierają słowo "faktura" 'Call PrintPDFAttachments4SelectionEmail("faktura") For Each oMail In Application.ActiveExplorer.Selection oMail.PrintOut 'Można zwielokrotnić drukowanie powielając tą linię Next End Sub Private Sub PrintPDFAttachments4SelectionEmail(Optional AttName$) If FileExists("C:Temp") = False Then MkDir ("C:Temp") On Error GoTo blad For Each item In Application.ActiveExplorer.Selection If item.Class = 43 Then oMail = item If oMail.Attachments.Count > 0 Then For Each oAtmt In oMail.Attachments If Len(AttName) = 0 Then ones: FileName = "C:Temp" & oAtmt.FileName If FileExists(FileName) = True Then Kill (FileName) 'lub odpytanie komendą MSGBOX z parametrem. oAtmt.SaveAsFile (FileName) If Right$(UCase(oAtmt.FileName), 3) = "PDF" Then Shell """C:Documents and SettingsrjedrusiDesktopFoxit_PDF_Editor_Portable_2.2.0.205_EnPDFEditPortable.exe"" /h /p """ + FileName + """", vbHide End If Else If InStr(1, UCase(oAtmt.FileName), UCase(AttName)) > 0 Then GoTo ones End If Next oAtmt End If End If Next item Exit Sub blad: MsgBox Err.Number & vbCr & Err.Description, vbExclamation, "O'Shon from VBATools.pl" End Sub Private Function FileExists(ByVal FilePath As String) As Boolean On Error GoTo blad FileExists = Len(Dir(FilePath, vbDirectory Or vbHidden Or vbSystem)) > 0 Exit Function blad: FileExists = False End Function
OShon
OShon, VBATools.pl 2013-03-25 17:15:19
Błąd w treści artykułu został poprawiony. Edytor tego artykułu usunął przypisanie do zmiennej obiektowej.
piotr
piotr 2013-12-16 14:44:29
witam, czy da się przekształcić powyższe makro tak aby drukował tylko i wyłącznie załącznik???
OShon
OShon, VBATools.pl 2014-11-29 02:11:42
Pytania proszę zadawać na forum