2012-11-08 16 views
5

Non riesco a ignorare un avviso di Outlook a livello di programmazione prima che venga visualizzato.Chiudi promemoria Outlook

Private Sub Application_Reminder(ByVal Item As Object) 
    Dim objRem As Reminder 
    Dim objRems As Reminders 
    If Item.Subject = "TESTING" Then 
     'downloadAndSendSpreadReport 
     Set objRems = Application.Reminders 
     i = 0 
     For Each objRem In objRems 
      i = i + 1 
      If objRem.Caption = "TESTING" Then 
       objRems.Remove i 
       If objRem.IsVisible Then 
        objRem.Dismiss 
       End If 
       Exit For 
      End If 
     Next objRem 
     Item.ReminderSet = False 
     Item.Delete 
     'Item.Dismiss 
    End If 
End Sub 

voglio usare questo appuntamento Oggetto come un trigger per alcune macro senza bisogno gli utenti per chiudere manualmente il promemoria.

Mi sembra, quando viene attivato questo evento, la voce di richiamo non è visibile, quindi non può essere respinta

ho cercato di rimuoverlo dalle promemoria impostata ma questo sembra per cancellare l'intero evento dal mio calendario. Inoltre, verrà ancora visualizzato un promemoria STRANGE TITLE non in ASCII.

Mi sono stancato di impostare la proprietà reminderSet dell'elemento appuntamento su false, la proprietà promemoria viene comunque visualizzata.

Quindi sono in cerca di un modo per a) chiudere il promemoria prima che venga visualizzato automaticamente/b). chiudere il promemoria dopo che si apre automaticamente .... o una soluzione alternativa per fare un MACRO programmato in Outlook. (. Si prega di notare che non ho il permesso di utilizzare processo pianificato in Windows né VBS)

Aggiornamenti:

ora ho il seguente codice. Il promemoria è stato rimosso, ma verrà comunque visualizzata una finestra di promemoria con una didascalia come "Non c'è un appuntamento/promemoria" qualcosa del genere.

L'evento beforeReminderShow è utile nel senso della Promemoria Object IsVisible = true

così posso respingere fuori .. ma i promemoria finestre continuerà a pop-up, anche se c'è 0 evento.

Private WithEvents olRemind As Outlook.Reminders 
Private Sub olRemind_BeforeReminderShow(Cancel As Boolean) 
Set objRems = Application.Reminders 
    For Each objRem In objRems 
      If objRem.Caption = "TESTING" Then 
       If objRem.IsVisible Then 
        objRem.Dismiss 
       End If 
       Exit For 
      End If 
     Next objRem 

End Sub 

[Risolto] montaggio finale La soluzione finale praticabile (ho messo in "ThisOutlookSession" Module) Spero che questo aiuta gli altri

' declare this object withEvents displaying all the events 
Private WithEvents olRemind As Outlook.Reminders 
Private Sub Application_Reminder(ByVal Item As Object) 
    Set olRemind = Outlook.Reminders 
    ' RUN OTHER MACRO HERE 
End Sub 

Private Sub olRemind_BeforeReminderShow(Cancel As Boolean) 

    For Each objRem In olRemind 
      If objRem.Caption = "TESTING" Then 
       If objRem.IsVisible Then 
        objRem.Dismiss 
        Cancel = True 
       End If 
       Exit For 
      End If 
     Next objRem 

End Sub 

risposta

3

L'unico modo che conosco per farlo è come segue.

avete bisogno di questo nella parte superiore del modulo/classe

Private WithEvents olRemind As Outlook.Reminders 

Poi, quando si ottiene il vostro Outlook devi fare questo

set olRemind = olApp.Reminders 

Dove olApp è l'oggetto Application di Outlook.

Ora nel codice è necessario avere questo evento

Private Sub olRemind_BeforeReminderShow(Cancel As Boolean) 

Una volta messo i WithEvents in alto allora si sarà in grado di vedere tutti gli eventi è possibile utilizzare.

Ora è possibile annullare questo evento e quindi non visualizzare la finestra di promemoria.

+0

darò una prova il Lunedi, anche grazie avanzare. Non sono riuscito a scoprire l'evento. Grazie! – Larry

+0

Leggendo nuovamente la tua domanda, penso che dovrai fare una combinazione di ciò che hai già e del mio suggerimento. Sto pensando a un caso in cui desideri rimuovere un promemoria, ma l'utente ha altri promemoria. In questo caso rimuovi il tuo e poi lascia che la finestra del promemoria mostri. Se il tuo è l'unico promemoria, useresti l'evento che ho suggerito di interrompere la visualizzazione della finestra. – darbid

+0

Ciao @darbid Vedi la mia modifica sulla domanda. Grazie – Larry

2

se si vuole licenziare tutti i promemoria, è possibile simplye implementare il codice seguente:

dichiarare questo oggetto withEvents la visualizzazione di tutti gli eventi

Private WithEvents olRemind As Outlook.Reminders 

Private Sub Application_Reminder(ByVal Item As Object) 
Set olRemind = Outlook.Reminders 
' RUN OTHER MACRO HERE 
End Sub 

Private Sub olRemind_BeforeReminderShow(Cancel As Boolean) 

Cancel = True   

End Sub 
+0

THanks @sparksustc, ho pubblicato la mia ultima versione realizzabile alla fine della mia domanda. ma la tua risposta è l'effettiva implementazione della risposta di darbid sopra. – Larry