VBATools

Reguły i Skrypty

by on Oct.10, 2010, under Outlook, Porady

Jednym z ciekawych rozwiązań automatyzacji Outlooka jest tworzenie reguł. W większości wykorzystywane są one do przenoszenia wiadomości z folderu „Skrzynka odbiorcza” do innego folderu, odpowiednika adresata określonego w regule.

Krok dalej to przygotowanie takiej reguły, która pozwoli przekazać wiadomość do innej osoby (nieokreślonej w wiadomości), pobrania danych z jej treści i zapisanie np. do pliku zewnętrznego (np. tworzenie logu wiadomości konkretnych odbiorców lub exportu ważnych elementów z jej treści) lub transformacji wiadomości na inny standard.

Poniżej przedstawione procedury, umieszczone w module developera Outlooka (Alt+F11) automatycznie pojawią się na liście skryptów, które to możemy podpiąć do przygotowanych reguł.

Przykład 1.

Jeśli w temacie przychodzącej wiadomości pojawi się słowo „Raport” to deleguj sprawę:

Sub Delegowac_raport(Item As Outlook.MailItem)
'MVP OShon from VBATools.pl
If InStr(1, Item.Subject, "Raport") > 0 Then
 Dim oMailItem As MailItem
 Set oMailItem = Application.CreateItem(olMailItem)
 With oMailItem
 .To = "Jan.Kowalski@vbatools.pl"
 .Subject = "Wykonaj raport miesięczny"
 .Body = "Raport dedykowany dla: " & Item.SenderName
 .Send
 End With
 Set oMailItem = Nothing
End 

Przykład 2.

Aby pobrać dane z wiadomości i przekazać ją do zmiennej stosujemy taką konstrukcję (zakładając, iż w treści otrzymanej wiadomości po słowie „Email:” jest podany adres przyszłego odbiorcy a następnym słowem w szablonie jest „Phone: ”

Name: John Doe
Email: johndoe@redmond.com
Phone: 123-456-7890
PracticeName: AlaMa Kota
Address: 123 JohnnyBravo Drive
Preferred Day(s) of Week: Sat
Preferred Time(s) of Day: 900-1100

Sub Przeslij_dalej_maila(Item As MailItem)
'MVP OShon from VBATools.pl
Dim dm&, dl&, Mail$
dm = InStr(1, Item.Body, "Email: ")
If dm > 0 Then
 dl = InStr(1, Item.Body, "Phone: ")
 Mail = Split(Mid$(Item.Body, dm, dl - dm))(1)
 If Mail Like "*@*.*" Then Call make_massage(Mail)
End If
End Sub

Sub make_massage(adresat$)
Dim oMailItem As MailItem
Set oMailItem = CreateItem(olMailItem)
 With oMailItem
 .To = adresat
 .Subject = "Twój temat"
 .Display 'aby wysłać zmień na .Send
 End With
Set oMailItem = Nothing
End Sub

Przykład 3.

Do przesyłania wiadomości (np. dla wymienionej osoby w regule), która sobie życzy otrzymywać wiadomości w teście niesformatowanym możemy zastosować takie rozwiązanie:

Sub Zamien_na_text(MyMail As MailItem)
 Dim MailID$, oMail As MailItem

 MailID = MyMail.EntryID
 Set oMail = Session.GetItemFromID(MailID)
 oMail.BodyFormat = olFormatPlain
 oMail.Save
 Set oMail = Nothing
End Sub

Przykład 4.

Często mamy potrzebę też że użytkownik chce przesłać dalej wiadomość, ale przez inne niż domyślne konto. Można wymusić konto dla takiej wiadomości (działa z MSO 2007/10):

Sub ForwardEmail_prez_inne_konto(oMail As MailItem)
'MVP OShon from VBATools.pl
If oMail Is Nothing Then Exit Sub
Dim oAccount As Outlook.Account
For Each oAccount In Application.Session.Accounts
 If oAccount = "Nazwa_konta" Then
 Dim oFWMail As MailItem
 Set oFWMail = oMail.Forward
 oFWMail.Recipients.Add "adres@adres.pl"
 oFWMail.SendUsingAccount = oAccount
 oFWMail.Send
 End If
Next
Set oFWMail = Nothing
End Sub

Przykład 5.

Musimy zapisywać wszystkie załączniki, od danego nadawcy. Oczywiście klikamy i zapisujemy – ale jak to zrobić z eliminacją klikania?:

Sub Zapis_AttMaila_na_dysk(Item As MailItem)
 If Item.Class = olMail Then
 If Item.Attachments.Count > 0 Then
 Dim objAtt As Outlook.Attachments
 Set objAtt = Item.Attachments
 For Each objAttach In objAtt
 objAttach.SaveAsFile "c:temp" & _
 Format(Now, "YYYY-MM-DD") & "_" & objAttach.FileName
 Next
 Set objAtt = Nothing
 End If
 End If
End Sub

Samo wiązanie procedur w regule odbywa się następująco:

Rule_1

Rys 1. Przykład dla poczty przychodzącej

Rule_2

Rys 2. Dla każdej poczty, bez podania konkretnego adresata wiadomości

Rule_3

Rys 3. Podepnij skrypt (lista dostępnych procedur)

Reszta postępowania zgodnie z kreatorem reguł.

Osadzenie procedur VBA znajdziecie w artykule: Instalacja i uruchamianie makr.

 

(c) 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.
:, , ,

4 Comments for this entry

  • djedi

    Mam kwerendę zawierającą maile do klientów. Chciałbym napisać skrypt, który skopiowalby maile, otworzył Outlooka i wkleil maile do ccw.
    Problemu to zrobić na kilka sposobów, ale nie udaje mi się osiągnąć zamierzonego rezultatu.

  • ciekawy

    Przyklad 5. Działa, ale… dopiero po uruchomieniu recznym na całym inboxie (outlook 2013).
    Co może blokować dodanie go do reguły ?
    Regula:
    każdy mail przychodzący na daną skrzynknę
    > uruchom skrypt

    ps. czy jest możliwość zainicjowania polaczenia sftp w takim makro ?

    pozdrawiam
    M.

    • vbatools

      Kolejność wykonywania może być powodem blokady. Proszę jednak o zadawanie pytań dot problemów technicznych na pow podlinkowane forum Outlooka, którego jestem moderatorem.

Leave a Reply