关闭提醒 - 运行时错误“-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
.
我有一个适用于 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
.