Home > Blockchain >  Dismissing Reminders - Runtime error '-2147024809 (80070057)'
Dismissing Reminders - Runtime error '-2147024809 (80070057)'

Time:04-15

I have a VBA macro for Outlook 2016 that enables or disables an email rule when a named appointment reminder fires.

The auto-enable and auto-disable parts are working, but I want to auto-dismiss the reminder afterwards.

I get

Runtime error '-2147024809 (80070057)'

with olRemind(i).Dismiss highlighted.

I am pretty sure it is throwing an error because the reminder hasn't shown up in the list of reminders yet. However, when I check ?olRemind(i) in the Immediate window it does return the correct caption (Enable TEST). It seems like the reminder both does and does not exist?

When I halt code execution, the reminder pops up and the email rule is auto-enabled (or disabled), so I know the rest of the code is working.

My hypothesis is that I need to refresh either the list of Reminder objects or the application itself (something similar to Excel's Application.ScreenUpdating). I called DoEvents to try and accomplish this but it didn’t fix the problem. I couldn't find another method or property that does this in 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

I tried two different methods for dismissing the reminder (see the two comments under "Enable TEST" vs. "Disable TEST"). Both triggered the same runtime error.

Ignore the Wait (5) call, that just loops DoEvents until 5 seconds from the current time.

CodePudding user response:

The error is MAPI_E_INVALID_PARAMETER. Try to set Item.ReminderSet = false instead of calling Reminder.Dismiss.

You will probably be better off using Reminders.BeforeReminderShow event (where Reminders comes from Application.Reminders) - you can set the Cancel parameter passed to your event handler to true.

  • Related