
Ich konnte über einen VBA-Code eine wiederkehrende E-Mail erstellen, die jedes Mal ausgelöst wird, wenn eine Erinnerung einer bestimmten Kategorie ausgelöst wird.
http://www.slipstick.com/developer/send-email-outlook-reminders-fires/
Meine Frage lautet: Wie kann ich die Erinnerung löschen, nachdem die E-Mail gesendet wurde? Wenn ich die Zeile „reminders(1).Dismit“ hinzufüge, wird der Code an dieser Stelle unterbrochen.
wenn ich mit der Ausführung fortfahre erscheint die Erinnerung schließlich in Outlook.
Es scheint, dass das Anwendungserinnerungsmakro vollständig ausgeführt werden muss, um das Erinnerungsereignis zu verwerfen.
Antwort1
Laut MSDN ist dieApplcation.Reminder
Ereignisverwendete Slipstick-Makros werden ausgeführtVorDer Erinnerungsdialog erscheint. Aber dieReminder.Dismiss
Methodeerfordert, dass im Erinnerungsdialog bereits eine Erinnerung angezeigt wird (nicht sicher, ob es dieselbe sein muss). Deshalb funktioniert das nicht. Allerdings gibt es meines Wissens nach keine Garantie dafür, dass es sich um Reminders(1)
die Erinnerung handelt, die gerade ausgelöst wurde; möglicherweise versuchen Sie, die falsche Erinnerung zu verwerfen.
Als mögliche Lösung (die ich betonen muss,Ich habe nicht getestet), versuchen Sie es mit Reminders.Remove(Item.Subject)
. Die Dokumentation scheint darauf hinzuweisen, dassReminders.Remove
erfordert den numerischen Index, aber einen Versuch ist es wert. Wenn zwei Elemente mit Erinnerungen denselben Betreff haben, besteht außerdem keine Garantie, dass Sie das richtige Element erhalten.
Antwort2
Ich hatte gerade selbst dieses Problem. Die Idee von j_foster scheint gut zu funktionieren. Es ist jedoch besser, die Eintrags-ID des Terminelements zu verwenden, um den Index der Benachrichtigung zu identifizieren. Dann kann man verwenden remove()
.
Siehe unten:
Private Sub Application_Reminder(ByVal Item As Object)
If TypeOf Item Is AppointmentItem Then
'Do Something...
'Loop over all reminders and find index of appt
Dim appt As AppointmentItem: Set appt = Item
Dim i As Integer: i = 0
Dim notif As reminder
For Each notif In Application.Reminders
i = i + 1
If notif.Item.EntryID = appt.EntryID Then
Call Application.Reminders.Remove(i)
Exit For
End If
Next
End If
End Sub