2013-03-20 1 views
1

Я использую приведенный ниже код, чтобы открыть окно глобального списка адресов, чтобы выбрать контакт в списке.получить информацию о менеджере из списка адресов Outlook vba

Для контакта, который выбран, я также хотел бы получить имя менеджера. Однако я не могу заставить его работать.

Любые рекомендации?

Private Sub accountManagerName_MouseDown(ByVal Button As Integer, ByVal Shift As Integer, ByVal X As Single, ByVal Y As Single) 
    Dim CDOSession, cdoAddressBook, olkRecipients, objAE 

    On Error Resume Next 
    Set CDOSession = CreateObject("MAPI.Session") 
' Change the name of your Outlook profile as needed. 
    CDOSession.Logon "", "", False, False 
    Set olkRecipients = CDOSession.AddressBook(, "Global Address List", 0, False) 
    For Each objAE In olkRecipients 
     accountManagerName.Text = objAE.name 
     'ccManager.Caption = objAE.Manager.name 
    Next 
    Set olkRecipients = Nothing 
    CDOSession.Logoff 
    Set CDOSession = Nothing 
End Sub 
+0

В объекте 'ContactItem' есть свойство' ManagerName'. Это то, что вы ищете? –

+0

это на сервере обмена, у меня нет никакой контактной информации, размещенной локально ... будет ли это работать? как бы реализовать свой пример? (код) – maxgohan

+0

Каков тип объекта 'objAE' в вашем коде? Запустите 'Debug.Print TypeName (objAE)', чтобы найти это. Если это ContactItem, вам просто нужно использовать свойство objAE.ManagerName, чтобы получить имя менеджера. –

ответ

0

Я смог понять это!

просто нужно было преобразовать объект-получатель в объект addressentry и вытащить информацию о менеджере оттуда, это можно сделать, используя objAE.addressEntry.Manager тоже!

Private Sub accountManagerName_MouseDown(ByVal Button As Integer, ByVal Shift As Integer, ByVal x As Single, ByVal Y As Single) 

    On Error Resume Next 
    Set CDOSession = CreateObject("MAPI.Session") 
' Change the name of your Outlook profile as needed. 
    CDOSession.Logon "", "", False, False 
     If Err.Number <> 0 Then MsgBox "Please ensure you have Outlook open.", , "ERROR" 
    Set olkRecipients = CDOSession.AddressBook(, "Select Account Manager", 0, False) 

    For Each objAE In olkRecipients 
     accountManagerName.Text = objAE.name 
     AMfullName = objAE.name 

     'convert Recipient object to AddressEntry object using the recipient ID 
     Set objAE2 = CDOSession.GetAddressEntry(objAE.ID) 

     AMfirstName = objAE2.fields(18) 
     AMlastName = objAE2.fields(22) 
     AMmanagerName = objAE2.Manager 

'  Debug.Print AMfirstName 
'  Debug.Print AMlastName 
'  Debug.Print AMmanagerName 
    Next 

    ccAMmanager.Caption = AMmanagerName 
    ccUserManager.Caption = getName("mgrname") 
    ccAMmanager.Activate 

    Set olkRecipients = Nothing 
    CDOSession.Logoff 
    Set CDOSession = Nothing 


End Sub 
0

В случае объектной модели Outlook используйте свойство AddressEntry.Manager.

CDO 1,21 не выставляет менеджер ввод адреса, но вы можете использовать Redemption и его RDO набор объектов (он предлагает полную замену библиотеки CDO 1.21 и может работать как под Outlook, и автономную версию MAPI) - это предоставляет объект RDOAddressEntry.Manager.

+0

спасибо за предложение, но этот лист excel будет использоваться более чем 1 человеком, и я не думаю, что мне будет разрешено устанавливать библиотеку на всех ПК .... – maxgohan

Смежные вопросы