Making Sure Outlook Calendar Reminders Actually Pop-up in Windows 7
Introduction #
In Windows 7, MS Outlook seems to be horribly bad at popping up calendar reminders when outlook doesn't have focus. This can cause a series of problems from minor annoyances to missed meetings. As discussed in this StackExchange question, there are some relatively easy work-arounds to this issue that I'll elaborate on here. If you've never used Outlook's VBA editor to extend it's capabilities before, this article will take you through how to set up everything you'll need to do, start to finish. If you're already familiar with using VBA in Outlook, then you can just skip to Step 5 and paste in the code and you'll be all set.
Step By Step #
-
Hit the Windows Key and type "certificate"
-
Select Digital Certificate for VBA Projects and type in a name for your certificate and hit OK
-
Open Outlook 2010 and Hit Alt + F11 to start the VBA editor
-
In the Project Pane on the left, Expand
Project1
>Microsoft Outlook Objects
> and double click onThisOutlookSession
-
Paste in the following code exactly:
'Declare Functions From User32 Library Private Declare PtrSafe Function FindWindowA Lib "user32" _ (ByVal lpClassName As String, _ ByVal lpWindowName As String) As Long Private Declare PtrSafe Function SetWindowPos Lib "user32" _ (ByVal hwnd As Long, _ ByVal hWndInsertAfter As Long, _ ByVal X As Long, _ ByVal Y As Long, _ ByVal cx As Long, _ ByVal cy As Long, _ ByVal wFlags As Long) As Long 'Declare Constants Private Const SWP_NOSIZE = &H1 Private Const SWP_NOMOVE = &H2 Private Const FLAGS As Long = SWP_NOMOVE Or SWP_NOSIZE Private Const HWND_TOPMOST = -1 'Only show the message the first time Private messageAlreadyShown As Boolean 'Finds Reminder Window and Brings to TopMost position Private Sub Application_Reminder(ByVal Item As Object) On Error Resume Next 'show message box for first reminder If Not messageAlreadyShown Then MsgBox "First Reminder", vbSystemModal, "" messageAlreadyShown = True End If 'find reminder window ReminderWindow = FindWindowA(vbNullString, "1 Reminder") 'bring reminder window to front SetWindowPos ReminderWindow, HWND_TOPMOST, 0, 0, 0, 0, FLAGS End Sub
-
Sign the Macro by going to Tools > Digital Signature and clicking Choose
-
Select the certificate you created earlier and hit OK
-
Select OK again, hit Ctrl + S to save and exit the VBA window
-
To Enable Macros, Go to File > Options and select Trust Center from the left window
-
Run the Trust center by clicking the Trust Center Settings button on the right.
-
From the Trust Center, select Macro Settings, and select "Notifications for digitally signed macros, all other macros disabled" and hit OK
-
Exit Outlook - It will ask you if you want to save the project, click Yes
-
Start Outlook - It will give you a security notice. Select "Trust all documents from this publisher" (You can first confirm that you are the publisher by selecting "Show Signature Details")
-
That’s it! You’re all set. You never have to touch any of that code again or miss another meeting (unintentionally)
UPDATE!
I've updated the code to use ActiveWindow instead of ActiveExplorer, which returns nothing "if no explorer is active." Thanks to CW for the impetus to update my code.