Outlook 2007 add-in shenanigans

Here are three things I was unable to find any guidance for on the internets regarding working with Outlook 2007 in Visual Basic, so I made it up.

1. How do you tell if a folder is a contacts folder?
I still dont know if this is the correct way – I may not have found the right search terms, but this works.

Check the DefaultItemType property. If it is Outlook.OlItemType.olContactItem, then the folder is a contacts folder.

2. How do you make a toolbar context aware / context sensitive? That is, how do I have a toolbar that is only displayed when viewing contacts, or the calendar, but not email items?

You will need to create an event handler for the FolderSwitch event on the active explorer. In this handler, check the DefaultItemType of the CurrentFolder on the active explorer.

A code block is worth a thousand words:

Public Class ThisAddIn
  Dim ToolBar As Office.CommandBar
  Dim WithEvents expl As Outlook.Explorer

  Private Sub ThisAddIn_Startup(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Startup
    expl = Me.Application.ActiveExplorer
    ToolBar = expl.CommandBars.Add("ToolBar", Office.MsoBarPosition.msoBarTop, False, True)
    ToolBar.enabled = true
  End Sub

  Private Sub expl_FolderSwitch() Handles expl.FolderSwitch
    If expl.CurrentFolder.DefaultItemType = Outlook.OlItemType.olContactItem Then
      ToolBar.Visible = True
      ToolBar.Visible = False
    End If
  End Sub
End Class

3. How do you create a Distribution List (aka DistListItem) in a non-default, custom folder? (Or how do you set the parent folder on a newly created Distribution List)?

All the examples I could find for creating Distribution lists programmatically suggest using Me.Application.CreateItem(Outlook.OlItemType.olDistributionListItem) to create the DistListItem object. When you do it this way, it always adds the Distribution list to the default contacts folder.

Turns out, you can also use <folder object>.Items.Add(Outlook.OlItemType.olDistributionListItem). You should be careful that this is only done in a contacts folder (can you see how this is all coming together?).

So, if you want to create a new distribution list in the current folder (instead of the default contacts folder), add a person to it, then present it to the user to save or disgard, you could do the following:

  Private Sub createDistList()
    Dim dlist As Outlook.DistListItem
    Dim recip As Outlook.Recipient
    dlist = Me.Application.ActiveExplorer.CurrentFolder.Items.Add(Outlook.OlItemType.olDistributionListItem)
    recip = Me.Application.Session.CreateRecipient("John Doe <jdoe@nowhere.com>")
  End Sub

I’ll let you figure out how to add the button, and create a handler for said button.

Hopefully this saves somebody some time. I find it hard to believe I’m the first person to try it…

Leave a Reply