web-dev-qa-db-fra.com

Comment déclencher l'exécution d'une macro après la réception d'un nouveau courrier dans Outlook?

J'écris une macro qui crée des tickets sur une base de données basée sur les alertes reçues d'un serveur Nagios sous forme d'e-mail. Cependant, je ne peux pas laisser la macro s'exécuter dans une boucle infinie lors de la vérification des e-mails car elle est tout simplement trop lourde en ressources et fait bloquer mon bureau. Je dois trouver un moyen de déclencher la macro uniquement lorsqu'un nouveau courrier est reçu.

J'ai cherché quelque chose dans le sens des événements NewMail sur le site Web MSDN, mais je ne trouve rien de cohérent. Quelqu'un peut-il me montrer juste un exemple de code pour montrer comment déclencher des macros à partir de nouveaux événements de messagerie?

36
Gautam Mainkar

Ce code ajoutera un écouteur d'événements à la boîte de réception locale par défaut, puis effectuera une action sur les e-mails entrants. Vous devez ajouter cette action dans le code ci-dessous.

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

Après avoir collé le code dans le module ThisOutlookSession, vous devez redémarrer Outlook.

55
JimmyPena

Essayez quelque chose comme ça dans ThisOutlookSession:

Private Sub Application_NewMail()
    Call Your_main_macro
End Sub

Mon Outlook vba vient de se déclencher lorsque j'ai reçu un e-mail et que cet événement d'application a été ouvert.

Edit: je viens de tester une boîte msg Hello World et elle a fonctionné après avoir été appelée dans le application_newmail événement lors de la réception d'un e-mail.

8
Alistair Weir