Outlook Object Model : How to programmatically get logged-in user’s CompanyName in Outlook 2003/2007?

Recently one of my customer updated that they have a requirement to implement the following logic:

1) Get Contact info from GAL or Address book for the specified contact
2) Get Contact information regarding his CompanyName etc.

In the scenario, i provided the following suggestions:

If you try Outlook 2003 & its prior versions: Using the Microsoft Outlook object model, you can access information that is stored in various address books. For example, you can retrieve information about entries in the Global Address Book, or an Outlook Address Book. But if you want to access additional entries that are typically available for a recipient (such as Office, Title or Phone) you can use the Collaboration Data Objects (CDO) object model.

You can try like this CDO code snippet… This code fragment compares the Address property of the Recipient object with the Address and Type properties of its child AddressEntry object, accessible through the recipients AddressEntry property, to demonstrate the relationships between these properties.

    If objOneRecip Is Nothing Then
        MsgBox "must select a recipient"
        Exit Function
    End If
    Set objAddrEntry = objOneRecip.AddressEntry
    If objAddrEntry Is Nothing Then
        MsgBox "no valid AddressEntry for this recipient"
        Exit Function
    End If
    strMsg = "Recipient full address = " & objOneRecip.Address
    strMsg = strMsg & "; AddressEntry type = " & objAddrEntry.Type
    strMsg = strMsg & "; AddressEntry address = " & objAddrEntry.Address
    MsgBox strMsg ' compare display names
    strMsg = "Recipient name = " & objOneRecip.Name
    strMsg = strMsg & "; AddressEntry name = " & objAddrEntry.Name

For more information about accessing these properties using CDO and detailed information, please see the following articles in the Microsoft Knowledge Base:

HOWTO: Read Address Book Properties in Visual Basic

HOWTO: Work with Distribution Lists Using CDO from VB

Note: CDO 1.2x/MAPI are not supported in a .NET Framework environment. Refer: http://support.microsoft.com/kb/813349

If you work with Outlook 2007 and later, then you can try using ExchangeUser Object. This object provides first-class access to properties applicable to Exchange users. You can also access other properties specific to the Exchange user that are not exposed in the object model through the PropertyAccessor object.

I tried the VBA code sample and obtain the CompanyName.

Sub GetUserCompany()
    Dim oExUser As Outlook.ExchangeUser
    'Obtain the AddressEntry for CurrentUser
    Set oExUser = Application.Session.CurrentUser.AddressEntry.GetExchangeUser
    MsgBox oExUser.CompanyName
 End Sub

You need to note that, “some of the explicit built-in properties are read-write properties. Setting these properties requires the code to be running under an appropriate Exchange administrator account; without sufficient permissions, calling the ExchangeUser.Update method will result in a "permission denied" error.”

Hope this helps!! Happy programming & happy holidays!!

Skip to main content