![如何在通过 vba 发送定期电子邮件后关闭提醒?](https://linux22.com/image/1460113/%E5%A6%82%E4%BD%95%E5%9C%A8%E9%80%9A%E8%BF%87%20vba%20%E5%8F%91%E9%80%81%E5%AE%9A%E6%9C%9F%E7%94%B5%E5%AD%90%E9%82%AE%E4%BB%B6%E5%90%8E%E5%85%B3%E9%97%AD%E6%8F%90%E9%86%92%EF%BC%9F.png)
我能够通过 vba 中的代码创建定期电子邮件,每次触发特定类别的提醒时都会触发该电子邮件。
http://www.slipstick.com/developer/send-email-outlook-reminders-fires/
我的问题是,如何在发送电子邮件后关闭提醒?当我添加行提醒(1)。关闭时,代码会中断。
如果我继续执行,提醒最终会出现在 Outlook 中。
看来,应用程序提醒宏需要完成执行才能消除提醒事件。
答案1
根据 MSDNApplcation.Reminder
事件使用 Slipstick 的宏执行前出现提醒对话框。但Reminder.Dismiss
方法要求提醒对话框中已经显示提醒(不确定是否必须是同一个提醒)。这就是它不起作用的原因。话虽如此,据我所知,不能保证这Reminders(1)
将是刚刚触发的提醒;您可能试图关闭错误的提醒。
作为一种可能的解决方案(我必须强调,我还没有测试过),请尝试使用Reminders.Remove(Item.Subject)
。文档似乎表明Reminders.Remove
需要数字索引,但值得一试。另外,如果两个带有提醒的项目有相同的主题,则不能保证您会得到正确的项目。
答案2
我自己也遇到过这个问题。j_foster 的想法似乎很有效。但是最好使用约会项目的条目 ID 来标识通知的索引。然后可以使用remove()
。
见下文:
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