Come faccio a far scattare una macro dopo che è stata ricevuta una nuova posta in Outlook?

Sto scrivendo una macro che crea ticket su un database in base agli avvisi ricevuti da un server Nagios come e-mail. Tuttavia, non posso lasciare che la macro venga eseguita in un ciclo infinito mentre si controlla la posta, perché è troppo pesante per le risorse e causa il blocco del desktop. Devo trovare un modo per triggersre la macro solo quando viene ricevuta una nuova mail.

Ho cercato qualcosa sulla falsariga degli eventi NewMail sul sito Web MSDN, ma non riesco a trovare nulla di coerente. Qualcuno può mostrarmi solo un po ‘di codice di esempio per mostrare come triggersre macro da nuovi eventi di posta?

Questo codice aggiungerà un listener di eventi alla Posta in arrivo locale predefinita, quindi eseguirà un’azione sulle e-mail in arrivo. Devi aggiungere quell’azione nel codice qui sotto.

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 

Dopo aver incollato il codice nel modulo ThisOutlookSession , è necessario riavviare Outlook.

Prova qualcosa di simile all’interno di ThisOutlookSession :

 Private Sub Application_NewMail() Call Your_main_macro End Sub 

Il mio outlook vba ha appena sparato quando ho ricevuto un’e-mail e ho aperto quell’evento applicativo.

Edit: ho appena testato un messaggio di Hello world msg e è stato eseguito dopo essere stato chiamato nell’evento application_newmail quando è stata ricevuta un’email.