Enumerate the Contacts Folder and Set Custom Property for only Contact Items
An Outlook folder can contain items of more than one message class. For example, by default, you can create contact items and distribution list items in the Contacts folder. If you want to systematically apply an action to only the contact items or to only the distribution list items in the folder, you must check for the message class for each item in the folder before applying the action.
This topic shows a code sample that uses the message class of an item to identify contact items and sets a user-defined Affiliation field for all contact items in the Contacts folder. The following describes the process:
The code sample gets all the items in the default Contacts folder.
It uses Items.Restrict to filter contact items from all the items in the default Contacts folder.
For each contact item, it uses UserProperties.Add to add a user-defined field Affiliation and sets it based on the existence of a home telephone number. If a home telephone number does not exist for the item, the Affiliation property is set to Business; otherwise, the field is set to Personal.
To run this code sample, place the code in the built-in ThisOutlookSession module. Run the SetAffiliationForContacts procedure.
Note that if a field of the name Affiliation already exists, running this example will overwrite it.
Sub SetAffiliationForContacts() Dim ns As NameSpace Dim foldContact As Folder Dim itemContact As ContactItem Dim colItems As Outlook.Items Dim myProperty As Outlook.UserProperty Set ns = Application.GetNamespace("MAPI") Set foldContact = ns.GetDefaultFolder(olFolderContacts) Set colItems = foldContact.Items.Restrict("[MessageClass]='IPM.Contact'") For Each itemContact In colItems ' Add user property to contact items Set myProperty = itemContact.UserProperties.Add("Affiliation", olText) If itemContact.HomeTelephoneNumber = "" Then myProperty = "Business" Else myProperty = "Personal" End If itemContact.Save Next End Sub