2013-03-20 58 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'属性。这是你在找什么? – 2013-03-20 19:43:13

+0

这是在交换服务器上,我没有任何联系信息在本地托管......这仍然有效吗?我将如何实施你的例子? (code) – maxgohan 2013-03-20 20:02:01

+0

代码中objAE的对象类型是什么?运行'Debug.Print TypeName(objAE)'来找到它。如果它是一个ContactItem,那么你只需要使用objAE.ManagerName属性来获取管理者的名字。 – 2013-03-20 20:32:15

回答

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人使用,我不认为我会被允许在所有的PC上安装图书馆.... – maxgohan 2013-03-21 13:44:43