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 On
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:\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(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
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. 

Shon Oskar – www.VBATools.pl



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

Dodaj komentarz

Dodaj komentarz
    Komentarz
Imię i nazwisko

Firma
Adres email
Podaj sumę cyfr 4 i 5:
Powiadamiaj mnie o nowych komentarzach do tego artykułu (musisz podać prawidłowy adres email).