关闭提醒 - 运行时错误“-2147024809 (80070057)”

Dismissing Reminders - Runtime error '-2147024809 (80070057)'

我有一个适用于 Outlook 2016 的 VBA 宏,可以在指定约会提醒触发时启用或禁用电子邮件规则。

auto-enable 和 auto-disable 部分工作正常,但我想 auto-dismiss 事后提醒。

我明白了

Runtime error '-2147024809 (80070057)'

突出显示 olRemind(i).Dismiss

我很确定它会引发错误,因为提醒尚未显示在提醒列表中。但是,当我在立即 window 中检查 ?olRemind(i) 时,它会 return 正确的标题(启用测试)。提醒似乎既存在又不存在?

当我暂停代码执行时,弹出提醒并且电子邮件规则为 auto-enabled(或禁用),所以我知道其余代码正在运行。

我的假设是我需要刷新提醒列表 objects 或应用程序本身(类似于 Excel 的 Application.ScreenUpdating)。我打电话给 DoEvents 来尝试完成此操作,但没有解决问题。我找不到其他方法或 属性 在 Outlook 中执行此操作。

Public WithEvents olRemind As Outlook.Reminders

Private Sub Application_Reminder(ByVal Item As Object)
    
    Set olRemind = Outlook.Reminders
    
    Dim i As Integer

    If Item.MessageClass <> "IPM.Appointment" Then
        Exit Sub
    End If
    
    If Item.Subject = "Enable TEST" Then
        Call OnOffRunRule("TEST", True, False)
        DoEvents
        'Wait 5 seconds
        Wait (5)
        'Dismiss reminder
        For i = olRemind.Count To 1 Step -1
            If olRemind(i).Caption = "Enable TEST" Then
'***THE FOLLOWING LINE CAUSES A RUNTIME ERROR***
                olRemind(i).Dismiss
            End If
        Next
    End If

    If Item.Subject = "Disable TEST" Then
        Call OnOffRunRule("TEST", False, False)
        DoEvents
        'Wait 5 seconds
        Wait (5)
        'Dismiss reminder
'***THE FOLLOWING LINE CAUSES A RUNTIME ERROR***
        Application.Reminders("Disable TEST").Dismiss
    End If
End Sub 'Application_Reminder

'Enable or disable a rule
Sub OnOffRunRule(RuleName As String, Enable As Boolean, Optional blnExecute As Boolean = True)
    Dim olRules As Outlook.Rules
    Dim olRule As Outlook.Rule
    Dim intCount As Integer
 
    Set olRules = Application.Session.DefaultStore.GetRules
    Set olRule = olRules.Item(RuleName)
    
    If Enable Then olRule.Enabled = True Else olRule.Enabled = False
    
    If blnExecute Then olRule.Execute ShowProgress:=True
        olRules.Save
  
    Set olRules = Nothing
    Set olRule = Nothing
End Sub 'OnOffRunRule

我尝试了两种不同的方法来消除提醒(请参阅“启用测试”与“禁用测试”下的两条评论)。两者都触发了相同的运行时错误。

忽略 Wait (5) 调用,它只会循环 DoEvents 直到从当前时间起 5 秒。

错误是MAPI_E_INVALID_PARAMETER。尝试设置 Item.ReminderSet = false 而不是调用 Reminder.Dismiss.

您可能最好使用 Reminders.BeforeReminderShow 事件(其中 Reminders 来自 Application.Reminders)- 您可以将传递给事件处理程序的 Cancel 参数设置为true.