December 3, 2021

Outlook: Never forget Meeting Reminders

In some cases in Microsoft Outlook, you might miss a meeting because no reminder was set. This can be quite annoying e.g. for a customer meeting.

Cases where you can miss a reminder

You are the organizer and forgot to set one.

You are not the Organizer and the Organizer forgot to set one

You got the meeting forwarded from a Google Invitation (somehow the reminders seem to get lost in this case between Google and Outlook)

You've organized a follow-up of a past meeting (which reminder was gone) - by copy/paste and forgot to add the reminder. 

Preventive Setting: Default reminder

Ensure you have set a default reminder in the Outlook Calendar Options. My Default is set to 15min.

Preventive Check with Macro (VBA)

You shall copy this code in your ThisOutlookSession module:
Private WithEvents Items As Outlook.Items
Private Sub Application_Startup()
Dim Ns As Outlook.NameSpace
Set Ns = Application.GetNamespace("MAPI")
Set Items = Ns.GetDefaultFolder(olFolderCalendar).Items
End Sub
' Ask if Remove Reminders on AllDay Events
' If no Reminder, Ask if Set default for meetings
Private Sub Items_ItemAdd(ByVal Item As Object)
'On Error Resume Next
If TypeOf Item Is Outlook.AppointmentItem Then
'Checks to see if all day and if it has a reminder set to true
If Item.AllDayEvent = True And Item.ReminderSet = True Then
If MsgBox("Do you want to remove the reminder of the AllDayEvent?", vbYesNo) = vbNo Then
Exit Sub
End If
Item.ReminderSet = False
Item.Save
End If ' AllDayEvent
If Item.ReminderSet = False And Item.MeetingStatus = olMeeting And DateDiff("n", Now, Item.Start) > 0 Then
If MsgBox("No Reminder for future meeting:Do you want to set a reminder (15min)?", vbYesNo) = vbNo Then
Exit Sub
End If
With Item
.ReminderSet = True
.ReminderMinutesBeforeStart = 15
.Save
End With
End If ' Meeting without reminder in the future
End If
End Sub
Code is also available in outlook-vba repository in Github more precisely in ThisOutlookSession.cls

This will catch up when a item is added in your calendar and check:
  • if it is a AllDay Event, if you want to remove the reminder
  • if it is a Meeting with Start date in the future and it does not have a reminder yet, it will prompt you if you want to add one.
This is especially useful if you copy/ paste a meeting to organize a follow-up. To get the macro fired, you shall paste it in the future target day.

Manual Visual Check

You can establish a daily routine to check for your day if all reminders are set.
To make this check easier consider the following Option in the Outlook Client: This will display a bell icon on the bottom right of each event with a reminder in your Calendar view.


Calendar Option: Show Bell icon

  • Open Outlook Options (File->Options)
  • Select "Calendar"
  • Check: Show bell icon on the calendar for appointments and meetings with reminders

Check and Fix with a Macro (VBA)

You can check and repair with a VBA script that the reminders are set for today.

See CheckReminder.bas. Import this module to setup.

I like to assign the macro CheckCurrentDayReminders to a button in the QAT. It will check if all meeting for the current/ selected day have reminders set and if not set them.

You will be prompted for each meeting, if you want to set the reminder.
Code is available in gist also.
Sub CheckTodayReminders()
' https://www.datanumen.com/blogs/quickly-send-todays-appointments-someone-via-outlook-vba/
Dim objAppointments As Outlook.Items
Dim objTodayAppointments As Outlook.Items
Dim strFilter As String
Dim objAppointment As Outlook.AppointmentItem ' Object
Set objAppointments = Application.Session.GetDefaultFolder(olFolderCalendar).Items
objAppointments.IncludeRecurrences = True
objAppointments.Sort "[Start]", False ' Bug: use False/descending see https://social.msdn.microsoft.com/Forums/office/en-US/919e1aee-ae67-488f-9adc-2c8518854b2a/how-to-get-recurring-appointment-current-date?forum=outlookdev
'Find your today's appointments
strFilter = Format(Now, "ddddd")
'strFilter = "2019-03-07"
strFilter = "[Start] > '" & strFilter & " 00:00 AM' AND [Start] <= '" & strFilter & " 11:59 PM'"
Set objTodayAppointments = objAppointments.Restrict(strFilter)
For Each objAppointment In objTodayAppointments
Call CheckReminder(objAppointment)
Next
' MsgBox "Meeting reminders were checked!"
End Sub
Sub CheckCurrentDayReminders()
' Check Reminder for selected Day in Calendar View
' https://www.datanumen.com/blogs/quickly-send-todays-appointments-someone-via-outlook-vba/
Dim objAppointments As Outlook.Items
Dim objTodayAppointments As Outlook.Items
Dim strFilter As String
Dim objAppointment As Outlook.AppointmentItem ' Object
Set objAppointments = Application.Session.GetDefaultFolder(olFolderCalendar).Items
objAppointments.IncludeRecurrences = True
objAppointments.Sort "[Start]", False ' Bug: use False/descending see https://social.msdn.microsoft.com/Forums/office/en-US/919e1aee-ae67-488f-9adc-2c8518854b2a/how-to-get-recurring-appointment-current-date?forum=outlookdev
Dim objCurAppointment As Object ' Object
Set objCurAppointment = GetCurrentItem()
If (objCurAppointment Is Nothing) Then
strFilter = Format(Now, "ddddd")
ElseIf Not TypeOf objCurAppointment Is Outlook.AppointmentItem Then
strFilter = Format(Now, "ddddd")
Else
strFilter = Format(objCurAppointment.Start, "ddddd")
End If
'Find your today's appointments
strFilter = "[Start] > '" & strFilter & " 00:00 AM' AND [Start] <= '" & strFilter & " 11:59 PM'"
Set objTodayAppointments = objAppointments.Restrict(strFilter)
For Each objAppointment In objTodayAppointments
Call CheckReminder(objAppointment)
Next
' MsgBox "Meeting reminders were checked!"
End Sub
Sub CheckReminder(objAppointment As Outlook.AppointmentItem)
Debug.Print "Check Reminder for '" & objAppointment.Subject & "'..."
' OUTLOOK BUG - set reminder on the serie if serie has some exceptions does not work
'If objAppointment.IsRecurring Then
' Set objAppointment = objAppointment.Parent
'End If
If objAppointment.ReminderSet = False Then
' Exclude Meetings mark as Free
If Not (objAppointment.MeetingStatus = olNonMeeting) And (objAppointment.BusyStatus = olFree) Then
Exit Sub
End If
objAppointment.ReminderSet = True
objAppointment.ReminderMinutesBeforeStart = 15 ' Enter your default time
objAppointment.Save
Debug.Print "Reminder set for '" & objAppointment.Subject & "'."
End If
End Sub
Sub CheckReminders()
' Check Reminder for selected Items (GetCurrentItems)
Dim objItem As Object
Set coll = GetCurrentItems
If coll.Count = 0 Then
Exit Sub
End If
For Each objItem In coll
If TypeOf objItem Is Outlook.AppointmentItem Then
Call CheckReminder(objItem)
End If
Next
End Sub
Public Sub SetDefaultReminder()
Dim objItem As Object
Set coll = GetCurrentItems
If coll.Count = 0 Then
Exit Sub
End If
For Each objItem In coll
If TypeOf objItem Is Outlook.AppointmentItem Then
If objItem.ReminderSet = False Then
objItem.ReminderSet = True
objItem.ReminderMinutesBeforeStart = 15 ' Enter your default time
objItem.Save
End If
End If
Next
End Sub

See also

How to Auto Set Different Reminder Time for Outlook Meetings in Different Color Categories - Data Recovery Blog (datanumen.com)

How to Remove Reminders on All Day Events (slipstick.com)

How to Quickly Send Your Today’s Appointments to Someone via Outlook VBA - Data Recovery Blog (datanumen.com)