Earlier i was working with one of the customer, where he wants to use Outlook Object Model to,

- retrieve the default contact folder items
- restrict on the retrieved items
- get the restricted items and gets its values – Full Name, Categories, FileAs… etc

Here is the way that i tried it – Code Snippet for your reference:

      Dim oOutlook As Outlook.Application
      Dim oNameSpace As Outlook.NameSpace
      Dim oFolder As Outlook.MAPIFolder
      Dim oContacts As Outlook.Items
      Dim oContact As Outlook.ContactItem
      Dim oItems As Outlook.Items
      Dim oItem As Outlook.ContactItem
      Dim i As Integer
 
      ' Connect with Outlook & get the Namespace
      Set oOutlook = New Outlook.Application
      Set oNameSpace = oOutlook.GetNamespace("MAPI")
 
      ' Retrieve the default Contacts Folder
      Set oFolder = oNameSpace.GetDefaultFolder(olFolderContacts)
 
      ' Retrieve the Items collection
      Set oContacts = oFolder.Items
 
      ' Create a Restriction on the Items
      Set oItems = oContacts.Restrict("[Categories] = 'Friend'")
 
      ' Display the number of items that match the restriction
      MsgBox "Found: " & oItems.Count
 
      ' Process each of the Restricted Items
      For Each oItem In oItems
         Debug.Print "Full Name : " & oItem.FullName & " Categories:  " & oItem.Categories & "File as:" & oItem.FileAs
      Next
      
      ' Clean it up
      Set oItems = Nothing
      Set oOutlook = Nothing

Happy Outlook programming!!