2012-06-29 13 views
26

Bir veritabanında, bir Nagios sunucusundan alınan uyarılar temelinde e-posta olarak bilet oluşturan bir makro yazıyorum. Ancak, postaları denetlerken makronun sonsuz bir döngü içinde çalışmasına izin veremiyorum çünkü çok fazla kaynak ağır ve masaüstümü asıyor. Makroyu yalnızca yeni bir posta alındığında tetiklemenin bir yolunu bulmalıyım.Outlook'ta yeni bir posta alındıktan sonra çalışacak makroyu nasıl tetiklerim?

MSDN sitesinde bulunan NewMail olayları boyunca bir şey aradım ama tutarlı bir şey bulamıyorum. Birisi bana yeni posta olaylarından makroları nasıl tetikleyeceğinizi göstermek için biraz örnek kod gösterebilir mi?

cevap

44

Bu kod, varsayılan yerel Gelen Kutusu'na bir olay dinleyicisi ekleyecektir, ardından gelen e-postalarda bir miktar eylem gerçekleştirecektir. Bu işlemi aşağıdaki kodda eklemeniz gerekir.

Private WithEvents Items As Outlook.Items 
Private Sub Application_Startup() 
    Dim olApp As Outlook.Application 
    Dim objNS As Outlook.NameSpace 
    Set olApp = Outlook.Application 
    Set objNS = olApp.GetNamespace("MAPI") 
    ' default local Inbox 
    Set Items = objNS.GetDefaultFolder(olFolderInbox).Items 
End Sub 
Private Sub Items_ItemAdd(ByVal item As Object) 

    On Error Goto ErrorHandler 
    Dim Msg As Outlook.MailItem 
    If TypeName(item) = "MailItem" Then 
    Set Msg = item 
    ' ****************** 
    ' do something here 
    ' ****************** 
    End If 
ProgramExit: 
    Exit Sub 
ErrorHandler: 
    MsgBox Err.Number & " - " & Err.Description 
    Resume ProgramExit 
End Sub 

ThisOutlookSession modülünde kodu yapıştırmadan sonra Outlook'u yeniden başlatmanız gerekir.

+0

Benim için çalışmıyor Outlook Professional Plus 2010 – Superdooperhero

+1

Benim kötü, makrolar devre dışı bırakılmış. Ancak bu senaryo için farklı makro güvenlik seviyesi yok. – Superdooperhero

+6

@JimmyPena Items_ItemAdd nerededir? –

6

ThisOutlookSession içine böyle bir şey deneyin: Bir e-posta aldım ve açık bu uygulama olayı vardı

Private Sub Application_NewMail() 
    Call Your_main_macro 
End Sub 

Benim bakış vba sadece ateş etti.

Düzenleme: Yalnızca bir e-posta iletisi aldım ve bir e-posta alındığında application_newmail olayında çağrıldıktan sonra koştum.

+0

Korkarım ki çalışmıyor gibi görünmüyor. Makroyu çalıştırmayı denedim ve sonra kendime bir posta yolladım, ama her şeyi yeniden başlatana kadar makroyu çalıştıramazdım. Sorunun ne olabileceğini düşünüyorsun? –

+0

Cevabımdaki kodu nereden aldınız? Bunu 'ThisOutlookSession' içine yerleştirdim ve bıraktım. Makroyu çalıştırmaya gerek yok, bir posta alındığında tetiklenir. –

+0

Ben de ThisOutlookSession içinde yapıştırılmış vardı, ama çalışırken bana çok fazla sorun veriyor. Sorunun kökü işaret bile edemiyorum, benim alt sadece tamamen rastgele şeyler yapar ... –

İlgili konular