2012-06-29 7 views
26

Ich schreibe ein Makro, das Tickets auf einer Datenbank basierend auf Warnungen von einem Nagios-Server als E-Mail erstellt. Ich kann jedoch das Makro nicht in einer Endlosschleife laufen lassen, während ich nach Mails suche, weil es einfach zu ressourcenintensiv ist und meinen Desktop hängen lässt. Ich muss einen Weg finden, das Makro nur auszulösen, wenn eine neue Post empfangen wird.Wie kann ich ein Makro auslösen, das ausgeführt wird, nachdem eine neue Mail in Outlook empfangen wurde?

Ich suchte auf der MSDN-Website nach etwas in der Art von NewMail-Ereignissen, aber ich kann nichts zusammenhängendes finden. Kann mir jemand nur ein wenig Beispielcode zeigen, um zu zeigen, wie Makros von neuen Mail-Ereignissen ausgelöst werden?

Antwort

44

Dieser Code fügt dem standardmäßigen lokalen Posteingang einen Ereignis-Listener hinzu und führt dann eine Aktion bei eingehenden E-Mails aus. Sie müssen diese Aktion im folgenden Code hinzufügen.

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 

Nachdem Sie den Code in ThisOutlookSession Modul einfügen, müssen Sie Outlook neu starten.

+0

Funktioniert nicht für mich in Outlook Professional Plus 2010 – Superdooperhero

+1

Meine schlechte, hatte Makros deaktiviert. Ein bisschen albern, dass es für dieses Szenario keine unterschiedliche Makrosicherheit gibt. – Superdooperhero

+6

@JimmyPena Wo wird Items_ItemAdd aufgerufen? –

6

Probieren Sie etwas wie das Innere ThisOutlookSession:

Private Sub Application_NewMail() 
    Call Your_main_macro 
End Sub 

Meine Aussichten vba nur ausgelöst, wenn ich eine E-Mail empfangen und hatte dieses Anwendungsereignis geöffnet.

Edit: Ich habe gerade eine Hallo Welt msg-Box getestet und es lief nach dem Aufruf in der application_newmail Veranstaltung, wenn eine E-Mail erhalten wurde.

+0

Ich fürchte, es scheint nicht zu funktionieren. Ich habe versucht, das Makro auszuführen und mir dann eine Mail gesendet, aber ich konnte mein Makro nicht ausführen, bis ich das Ganze reinitialisiert habe. Was könnte das Problem sein? –

+0

Wo hatten Sie den Code in meiner Antwort? Ich platzierte es in 'ThisOutlookSession' und verließ es. Sie müssen das Makro nicht ausführen, das beim Empfang einer Mail ausgelöst wird. –

+0

Ich hatte es auch in ThisOutlookSession eingefügt, aber es gibt mir viele Probleme beim Laufen. Ich kann nicht einmal auf die Wurzel des Problems zeigen, mein Sub gerade tut völlig zufällige Dinge ... –

Verwandte Themen