Tip o’ the Week #196 – Change Outlook meeting duration

clip_image002It’s seemingly an irrefutable law that when you book a meeting for an hour, it takes an hour. Or what might happen is some people are still rocking up at 3 or 4 minutes after the start, and others start packing up 5 minutes before the end because they have another meeting to go to. Others yet will start a whole new discussion (“oh, just one more thing…”) with 2 minutes to go.

One comedian even made a fortune trying to teach us how to make meetings work. Here’s one video that’s 20 years old – yet still holds entirely true today. It was updated last year, and the original version is almost 40 years old. Clearly we don’t learn.

Now this week’s tip has been a long time coming – since the very beginning of Tip o’ the Week, approaching 3 years ago on this blog (and a year before that internally at Microsoft), it’s something that has been in the back of mind as a productivity tip. Thanks to discovering a blog post that provided suitable inspiration for the idea, and for the majority of the code, here it finally is. Praise be! Huzzah! Etc.

Frustratingly, Outlook has never offered the option to set how long a new meeting should clip_image004be, or what time it should start. There are a few workarounds – you can set the timescale the calendar shows (so each line is 60, 30, 15 etc minutes, and if you double click on a section of your calendar to create an appointment, then it is set to that time slice). Try it out by going into Calendar, selecting the View tab, then View Settings. Select Other Settings on the pop up dialog, and change the view from there.

What we need is a Macro

Today’s tip will let you set both the default duration and the start time of new appointments – so if you want to make all meetings 20 minutes long, starting 5 minutes past the hour or half hour, then you simply set it up as such when you install the code. Don’t be afraid – there is code involved here, but it’s fairly straightforward.

Here it is, step by step:

  • Start Outlook. Well, duh – you already have…
  • clip_image005Press ALT-F11 to open the Visual Basic editor
  • Expand out the tree at the top left, then double-click on the ThisOutlookSession line, which opens a code window to the right.
  • Paste the following into the code window on the right:

Private objMeeting As clsMeeting

Private Sub Application_Quit()
    Set objMeeting = Nothing
End Sub

Private Sub Application_Startup()
     Set objMeeting = New clsMeeting
End Sub

Next, right-click on ThisOutlookSession on the left hand pane, and choose Insert then Class Module.

  • Click on the newly-created Class1 and in the Properties section immediately beneath, select (Name) and rename Class1 to clsMeeting.
  • Now double-click on the new clsMeeting, and you’ll see a code window appear on the right – copy and paste the following code into that window:

Const DEFAULT_LENGTH = 45
Const START_OFFSET = 5


Private WithEvents olkIns As Outlook.Inspectors, _
        WithEvents olkApt As Outlook.AppointmentItem


Private Sub Class_Initialize()
    Set olkIns = Application.Inspectors

End Sub


Private Sub Class_Terminate()
    Set olkIns = Nothing
End Sub


Private Sub olkApt_PropertyChange(ByVal Name As String)
    If Name = "AllDayEvent" Then
        With olkApt
        If .AllDayEvent = False Then
            .Duration = DEFAULT_LENGTH
             .Start = DateAdd("n", START_OFFSET, .Start)
        End If
        End With
    End If
End Sub

Private Sub olkApt_Unload()
    Set olkApt = Nothing
End Sub

Private Sub olkIns_NewInspector(ByVal Inspector As Inspector)
    If Inspector.CurrentItem.Class = olAppointment Then
        Set olkApt = Inspector.CurrentItem
        With olkApt
            If .CreationTime = #1/1/4501# Then
                .Start = DateAdd("n", START_OFFSET, .Start)
                .Duration = DEFAULT_LENGTH
            End If
        End With
    End If
End Sub

OK, now you have your code imported. To change the defaults for meeting duration or offset time, simply change either or both of the Const values at the top of the code. You’ll need to restart Outlook for these changes to take effect.

There are a few steps to go through now:clip_image008

  • Click the floppy disk icon on the top left of the toolbar to save your changes, then close the Visual Basic for Applications window down.
  • In Outlook 2013, go into File / Options / Trust Center, then click the Trust Center Settings button.
  • Now, go into Macro Settings and change from the default of “Notifications for digitally signed macros, all other macros disabled” to “Notifications for all macros”

clip_image009

clip_image011

Now close Outlook entirely, and restart it – you’ll get a prompt to Enable Macros – this is unavoidable, sadly, but it will only happen when you first launch Outlook. Assuming you actually want this code to run, choose Enable Macros.

Now, what happens is whenever you create a new appointment, the Macro you’ve just installed will jump on it and set the start and duration times as appropriate. If you need to change the defaults, simply go back into the VB code as above, edit the values in clsMeeting, save the whole shebang and restart Outlook again. If you don’t want the code to run any more, go back into Trust Center and change the Macro settings back to the previous value.

Leave a Reply

Your email address will not be published.