Reguły i Skrypty
napisane przez Oskar w dniu niedziela, 10 Październik, 2010, w kategorii Porady - Outlook
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:

Rys 1. Przykład dla poczty przychodzącej

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

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.


