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:
Sub FixUpContacts() 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 End If If itemChanged = True Then SpecificItem.Save End If End If Next ExitFunc: End Sub