To fix a problem with a corrupted Outlook profile, I created a new profile which caused all my Contacts to be initialized from my Windows Live account. Pretty much everything came in OK, but one of the annoying things is that the “default mailing address” isn’t set right. For whatever reason, Outlook doesn’t just do the logical thing here and say, well, the mailing address is home if there’s only a home address, work if there’s only a work address and if there’s both, I don’t know. For 80+% of my contacts, I have only a work or home address but not both, and this would work great. But instead, Outlook requires you to identify which address is the mailing address. I had done this manually in my old contacts, but apparently this isn’t one of the Outlook Contact fields that is saved up to Windows Live – so it existed only in the local Outlook file. When I blew that away and created a new profile, all that was lost.
Why does this matter? When you do a mail merge, the mailing address is what’s used. Plus I have a favorite view that shows name, mailing address, email, home and work phone in a list. It’s a handy way to look things up quickly. For all my contacts, mailing address is blank.
After living with this for a bit, I pulled out my old “VBA for Microsoft Office 2000 Unleashed” (yup, it’s been a while…) and wrote a little Outlook macro to do the right thing here:
On Error GoTo ExitFunc
Set olns = Application.GetNamespace("MAPI")
Set MyFolder = olns.GetDefaultFolder(olFolderContacts)
' Set MyItems to the collection of items in the folder.
Set MyItems = MyFolder.Items
For Each SpecificItem In MyItems
Dim itemChanged As Boolean
itemChanged = False
If SpecificItem.SelectedMailingAddress = olNone Then
If SpecificItem.HomeAddress <> "" And SpecificItem.BusinessAddress = "" Then
SpecificItem.SelectedMailingAddress = olHome
itemChanged = True
ElseIf SpecificItem.HomeAddress = "" And SpecificItem.BusinessAddress <> "" Then
SpecificItem.SelectedMailingAddress = olBusiness
itemChanged = True
If itemChanged = True Then