For the most part, Outlook works just fine. Of course, my acceptance of the functional level of this Microsoft product probably stems from many years of being forced to use Lotus Notes. Anything works just fine in comparison.
However, there are a few niggles which really annoy me. One is that the default time for snoozing a meeting reminder can’t be changed. Well, can’t be changed to what I want it to be. It only takes one minute to get to a meeting, and there’s no point in getting to a meeting more than one minute early. If I get reminded 5 minutes before the meeting, I tend to think “Right – I have two or three minutes to get this finished quickly, and then go”. But I have this tendency to get lost in what I’m doing, and occasionally find myself rushing to a meeting 10 minutes late. So when the initial reminder comes up, I want to hit Snooze, and be reminded exactly 2 minutes before my meeting.
The other issue is when you delete a pointless email (such as a meeting acceptance, or those overly polite people that send back an email saying “Thanks” in response to everything you do), it shows up in Deleted Items and gives it an unread count. In Bold. I hate seeing an unread count. It means that there’s something there that needs my attention. Except that it doesn’t. Grrrr.
I used to use AutoHotKey to deal with the former. And grit my teeth on the other one. But I’m not allowed to install AutoHotKey on my work machine now, and gritting teeth on two problems is detrimental to my dental bills. So I spent a bit of time this week getting to grips with Outlook VBA, and have solved both issues.
This bit marks anything in the Deleted Items folder as read anytime Outlook does just about anything:
Private Sub Application_ItemLoad(ByVal Item as Object) Call MarkDeletedAsRead End Sub Sub MarkDeletedAsRead() ' goes through the Deleted Items folder, and marks all as read Dim fld As Folder Dim itm As Object Set fld = Session.GetDefaultFolder(olFolderDeletedItems) For Each itm In fld.Items On Error Resume Next If itm.UnRead = True Then itm.UnRead = False End If Next itm End Sub
And this bit ensures that when you press the Snooze button, it sets the snooze time to x minutes before the meeting (where x can be set by applying a different value to TimeToGetThere):
Public WithEvents objReminders As Outlook.Reminders Private Sub Application_Startup() ' refresh reminders list on startup Call Initialise_Handler End Sub Private Sub Application_Reminder(ByVal Item As Object) ' refresh reminders list when a reminder window pops Call Initialize_Handler End Sub Sub Initialise_Handler() Set objReminders = Outlook.Reminders End Sub Private Sub objReminders_ReminderAdd(ByVal RemObj As Reminder) Call Initialise_Handler End Sub Private Sub objReminders_Snooze(ByVal RemObj As Reminder) 'Occurs when you click Snooze Const TimeToGetThere = 2 Dim TimeToGo As Variant ' calculate number of minutes until meeting start time TimeToGo = (RemObj.OriginalReminderDate - (Date+Time))*24*60 ' calculate number of minutes until the next reminder TimeToGo = Round(TimeToGo - TimeToGetThere,0) If RemObj.IsVisible = True Then RemObj.Snooze TimeToGo End If End Sub
And there you have it. Stick that in your ThisOutlookSession and save it. Problem solved. Assuming you have the same slightly nutty outlook on life that I do, you’re welcome.