Issue. I’m something of a stickler for keeping appointments. I make it a point to arrive at meetings on time. I think it’s rude and unprofessional to arrive late or, worse, not show up at all. Following the advice of "Getting Things Done" author David Allen I created a trusted system for managing all the details of my life. I settled on using Outlook. When I make an appointment or schedule a meeting I put it on my calendar immediately. I’ve configured Outlook to remind me of all appointments/meetings 15 minutes before they start. That reminder helps ensure that I get to the meeting on time. Unfortunately some of my colleagues aren’t as diligent. I find it frustrating when a meeting begins and some of the principal players aren’t there. It’s even worse if the meeting is with a customer and we have to spend time hunting for some of the participants from our side. That’s bad business. When asked why they were late getting to the meeting the responses are typically along the lines of "I missed the reminder", "I forgot to set a reminder", "I saw the reminder, but was busy and forgot", etc. Wouldn’t it be nice if Outlook could automatically send a message to all meeting participants reminding them of the meeting? While this wouldn’t ensure that everyone arrives on time it would help combat the problem by jogging their memory with an email.
Background. Outlook, at least through 2007, displays an onscreen reminder if one is set for the given appointment/meeting. Each user can customize the default reminder time which means that reminders can be disabled entirely if a user chooses to do so. Meeting participants may or may not have a smartphone that syncs with their Outlook calendar. Those that do may see a reminder on the phone.
Solution. Each time Outlook displays a reminder it triggers an event that we can use to run a VBA (Visual Basic for Applications) procedure. The code in the procedure can then create and send an email to the meeting participants reminding them of the meeting.
a. Full version of Outlook. This solution only works with the full version of Outlook. It is not compatible with Outlook Web Access (OWA) or Outlook Express.
b. Outlook 2007. The code will work in earlier versions of Outlook too, but they include security constraints that prevent a script from sending a message without the use of third-party tools. If anyone who reads this article is interested in implementing this on a computer using Outlook 2003 or earlier, then they can contact me for details on what is needed.
c. You must be the meeting organizer for this solution to work. This constraint prevents creating a storm of reminder messages if the solution is implemented on multiple computers. Otherwise each computer that runs this solution would send a reminder message for any appointment configured for reminders. More about this below.
d. Outlook must be running for this solution to work.
1. Add the Code to Outlook
a. Start Outlook
Visual Basic Editor.
c. If not already expanded, expand
Microsoft Office Outlook Objects and click on
d. Copy the code below and paste it into the right-hand pane of Outlook's VB Editor window.
e. Edit the code as needed. I included comment lines wherever something needs to or can change.
f. Click the diskette icon on the toolbar to save the changes.
g. Close the VB Editor
j. Set "Macro Security" to
Warnings for all macros.
l. Close Outlook.
m. Start Outlook. Outlook will display a dialog-box warning that ThisOutlookSession contains macros and asking if you want to allow them to run. Click
Dim WithEvents olkReminders As Outlook.RemindersPrivate Sub Application_Quit() Set olkReminders = NothingEnd SubPrivate Sub Application_Startup() Set olkReminders = Application.RemindersEnd SubPrivate Sub olkReminders_ReminderFire(ByVal ReminderObject As Reminder) 'On the next line edit the triggering category name as desired.' Const REMINDER_CATEGORY_NAME = "Reminders" Dim olkApt As Outlook.AppointmentItem, _ olkMsg As Outlook.MailItem, _ olkRcp As Outlook.Recipient If ReminderObject.Item.Class = olAppointment Then Set olkApt = ReminderObject.Item If olkApt.MeetingStatus = olMeeting Then If InStr(1, olkApt.Categories, REMINDER_CATEGORY_NAME) Then If olkApt.Organizer = Session.CurrentUser Then Set olkMsg = Application.CreateItem(olMailItem) With olkMsg For Each olkRcp In olkApt.Recipients Select Case olkRcp.Type 'On the next line remove olOptional if you only want reminders sent to required attendees.' Case olRequired, olOptional .Recipients.Add olkRcp.Address End Select Next 'On the next line edit the message subject as desired.' .Subject = "Meeting Reminder" .BodyFormat = olFormatPlain 'On the next 5 lines edit the message body as desired.' .Body = "This is a reminder of the following meeting:" & vbCrLf _ & "Subject.: " & olkApt.Subject & vbCrLf _ & "Starts..: " & olkApt.Start & "(" & olkApt.StartTimeZone & ")" & vbCrLf _ & "Ends....: " & olkApt.End & "(" & olkApt.StartTimeZone & ")" & vbCrLf _ & "Location: " & olkApt.Location .Send End With End If End If End If End If Set olkApt = Nothing Set olkMsg = Nothing Set olkRcp = NothingEnd Sub
a. Create a meeting in Outlook just as you normally would.
b. Add a category of "Reminders" (or whatever category name you set on line 13 of the code) to the meeting.
How This Works. Here's how the solution works.
a. A reminder is triggered by an Outlook item (e.g. appointment, task, etc.) raising the
b. The event is trapped, running the code in the procedure olkReminders_ReminderFire and passing it the item that triggered the reminder.
c. The code tests to see if the event was triggered by an appointment. If it wasn’t, then processing is halted. This constraint prevents a message from being sent for any item that triggers a reminder.
d. The code tests to see if the appointment is a meeting (i.e. involves others). If it isn’t, then processing is halted. This constraint prevents reminder messages being sent for appointments (i.e. items that only involve you).
e. The code tests to see if the meeting’s categories includes the defined keyword. If it doesn’t, then processing is halted. This allows you to control which meetings reminders are sent for. Without this constraint a reminder would be sent for every meeting.
f. The code test to see if you are the meeting organizer. If you aren’t, then processing is halted. This constraint prevents the message storm I described in item "c" of
g. The code creates and sends an email addressed to all meeting attendees, or optionally to just the required attendees, reminding them of the meeting.
Notes. One note of caution. The solution will send a message
each time a configured item’s reminder fires. When a reminder fires if you select the option to sleep the reminder for a set number of minutes, then a second message will be sent when the reminder fires again. Be careful not to overwhelm attendees with too many reminder messages.
Another in your great list of 'usable' Articles.
You should imbed hyper-links between all of these 'how-to' Articles you're doing.
"Yes" vote above.
That's a good idea. I think I'll do that.