Microsoft Outlook troubleshooting

Czasami zdarza się, że podczas wysyłania emaila zapominamy dodać do niego załącznik. Można tego jednak łatwo uniknąć umieszczając poniższy kod makra w module klasy ThisOutlookSession edytora VB. 

Private Sub Application_ItemSend(ByVal Item As Object, Cancel As Boolean)
    Dim oMail As MailItem, kom
    If Item.Class = 43 Then Set oMail = Item
    If InStr(1, LCase(oMail.To), LCase("Monika")) > 0 And _
       InStr(1, LCase(oMail.Subject), LCase("Raport")) > 0 And _
       oMail.Attachments.Count = 0 Then
        kom = MsgBox("Nie dołączono raportu." & vbCr & _
                     "Czy chcesz przerwać nadanie tej wiadomości?", _
                      vbYesNo + vbDefaultButton1 + vbQuestion, _
                     "Ostrzeżenie o braku załącznika VBATools.pl")
        If kom = vbYes Then Cancel = True : Exit Sub
    End If
    End Sub

W przypadku wysłania wiadomości bez załączników do adresata Monika z tematem zawierającym słowo Raport zostanie wyświetlone okno z zapytaniem (Rys.1.):

Ekran wysyłania wiadomości
Rys.1. Ekran pojawiający się podczas wysyłania wiadomości

Możemy dodatkowo rozwinąć powyższy kod tak, aby wysyłanie wiadomości bez załącznika wymusiło wskazanie pliku, który będzie dołączony do emaila.

Aby to zrobić należy dodać w developerze Outlooka kontrolkę Excela oraz umieścić poniższą procedurę zamiast powyższej.

VBA Edytor\Menu\Tools\References dodajemy Microsoft Excel 14.0 Object Library.

Private Sub Application_ItemSend(ByVal Item As Object, ByVal Cancel As Boolean)
    Dim oMail As MailItem, kom, x&
    Dim xApp As New Excel.Application
    Dim fileName As Object

    If Item.Class = 43 Then Set oMail = Item
    If InStr(1, LCase(oMail.To), LCase("Monika")) > 0 And _
       InStr(1, LCase(oMail.Subject), LCase("Raport")) > 0 And _
       oMail.Attachments.Count = 0 Then
        kom = MsgBox("Nie dołączono raportu." & vbCr & _
                     "Czy chcesz podpiąć pliki do wiadomości?", _
                      vbYesNoCancel + vbDefaultButton1 + vbQuestion, _
                     "Ostrzeżenie o braku załącznika VBATools.pl")

        If kom = vbYes Then
            fileName = xApp.GetOpenFilename(FileFilter:="Wszystkie pliki (*.*),*.*", _
                                       Title:="Wybierz pliki załącznika", _
                                       MultiSelect:=True)
            If Not IsArray(fileName) Then
                MsgBox("Nie wybrano żadnego pliku.") : Exit Sub
            Else
                For x = LBound(fileName) To UBound(fileName)
                    oMail.Attachments.Add(fileName(x))
                Next x
                oMail.Save()
            End If
        ElseIf kom = vbCancel Then
            Cancel = True
        End If
    End If
End Sub

Po zastosowaniu powyższego kodu przy próbie wysłania wiadomości bez załączników pojawi się poniższe okno (Rys.2.):

Ekran z zapytaniem o pliki załacznika
Rys.2. Ekran z zapytaniem o pliki załącznika.
 
Odpowiedź Tak, oznaczać będzie wyświetlenie okna wyboru plików do załączenia (Rys .3.). Anulowanie komunikatu przerwie proces wysyłania wiadomości.
 
Wybór załączników
Rys.3. Okno wyboru załączników.
 
Przytrzymując na klawiaturze klawisz Ctrl i klikając lewym przyciskiem myszy możemy zaznaczyć klika plików na raz (Rys.4.).
 
Wybrane załączniki
Rys.4. Wskazane wcześniej pliki dołączone do wiadomości.  

-----

Errata dotycząca wersji 2013.

W niej obrazki dołączone do wiadomości (np w podpisie) są traktowane podobnie jak załączniki. To też należy wziąć to pod uwagę i zwiększyć ilość podczas warunku oMail.Attachments.Count = 0. Wartość tą należy odpowiednio zwiększyć.

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
Radosław Kukla
Radosław Kukla 2014-11-06 13:46:56
Na Outlooku 2013 nie działa wyrzuca błąd Private Sub Application_ItemSend(ByVal Item As Object, Cancel As Boolean) Dim oMail As MailItem, kom If Item.Class = 43 Then oMail = Item If InStr(1, LCase(oMail.To), LCase("Monika")) > 0 And _ InStr(1, LCase(oMail.Subject), LCase("Raport")) > 0 And _ oMail.Attachments.Count = 0 Then kom = MsgBox("Nie dołączono raportu." & vbCr & _ "Czy chcesz przerwać nadanie tej wiadomości?", _ vbYesNo + vbDefaultButton1 + vbQuestion, _ "Ostrzeżenie o braku załącznika VBATools.pl") If kom = vbYes Then Cancel = True : Exit Sub End If Exit Sub
Radosław Kukla
Radosław Kukla 2014-11-06 14:40:23
Na Outlooku 2013 nie działa wyrzuca błąd Private Sub Application_ItemSend(ByVal Item As Object, Cancel As Boolean) Dim oMail As MailItem, kom If Item.Class = 43 Then oMail = Item If InStr(1, LCase(oMail.To), LCase("Monika")) > 0 And _ InStr(1, LCase(oMail.Subject), LCase("Raport")) > 0 And _ oMail.Attachments.Count = 0 Then kom = MsgBox("Nie dołączono raportu." & vbCr & _ "Czy chcesz przerwać nadanie tej wiadomości?", _ vbYesNo + vbDefaultButton1 + vbQuestion, _ "Ostrzeżenie o braku załącznika VBATools.pl") If kom = vbYes Then Cancel = True : Exit Sub End If Exit Sub
Oskar Shon
Oskar Shon, VBATools.pl 2014-11-06 22:16:48
Dodałem sprostowanie dot wersji 2013. Po więcej pytań odsyłam na forum.