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

Recently Active Members

Profile picture of vbatools
Profile picture of Karol Stilger
Profile picture of Joanna Subik
Profile picture of Anorak
Profile picture of marcinmachalowski
Profile picture of programistaaccess
Profile picture of piotrpawlik
Profile picture of Emil Wasilewski
Profile picture of kicekpicek
Profile picture of coldfusion
Profile picture of Gosia Borzęcka
Profile picture of lukaszch
Profile picture of itadministracja
Profile picture of farbenia
Profile picture of Łukasz Kałużny
Profile picture of kabzinski
Profile picture of rtynski
Profile picture of leszekbetlinski
Profile picture of Iv
Profile picture of Justyna Spychała