2012-06-29 8 views
26

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 attivare la macro solo quando viene ricevuta una nuova mail.Come attivare una macro dopo la ricezione di una nuova posta in Outlook?

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 attivare macro da nuovi eventi di posta?

risposta

44

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 incollare il codice nel modulo ThisOutlookSession, è necessario riavviare Outlook.

+0

Non funziona per me in Outlook Professional Plus 2010 – Superdooperhero

+1

Il mio male aveva macro disabilitate. Peccato che non ci sia un diverso livello di sicurezza delle macro per questo scenario. – Superdooperhero

+6

@JimmyPena Dove viene chiamato Items_ItemAdd? –

6

provare qualcosa di simile all'interno ThisOutlookSession:

Private Sub Application_NewMail() 
    Call Your_main_macro 
End Sub 

mio outlook VBA appena sparato quando ho ricevuto una e-mail e aveva quell'evento applicazione aperta.

Modifica: 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.

+0

Ho paura che non sembri funzionare. Ho provato a eseguire la macro e poi mi mando una mail, ma non ho potuto far funzionare la mia macro finché non ho reinizializzato l'intera cosa. Quale pensi che potrebbe essere il problema? –

+0

Dove hai il codice nella mia risposta? L'ho messo in 'ThisOutlookSession' e l'ho lasciato. Non è necessario eseguire la macro che verrà attivata quando viene ricevuta una mail. –

+0

L'ho incollato anche in ThisOutlookSession, ma mi dà molti problemi durante l'esecuzione. Non riesco nemmeno a puntare alla radice del problema, il mio sub fa cose completamente casuali ... –

Problemi correlati