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.
Code is also available in outlook-vba repository in Github more precisely in ThisOutlookSession.cls
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:
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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 |
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.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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 |