Reguły i Skrypty
by vbatools 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:
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.
November 21st, 2013 on 16:59
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.
November 21st, 2013 on 20:36
Proszę o zadanie pytania na forum http://www.outlook.pl/forum/
December 15th, 2015 on 10:29
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.
December 15th, 2015 on 13:10
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.