Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/excel/25.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/vba/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Excel 从Outlook地址列表vba获取经理信息_Excel_Vba_Outlook - Fatal编程技术网

Excel 从Outlook地址列表vba获取经理信息

Excel 从Outlook地址列表vba获取经理信息,excel,vba,outlook,Excel,Vba,Outlook,我正在使用下面的代码打开“全局地址列表”窗口,以选择列表中的联系人 对于选定的联系人,我还想获得经理的姓名。然而,我似乎无法让它发挥作用 有什么建议吗 Private Sub accountManagerName_MouseDown(ByVal Button As Integer, ByVal Shift As Integer, ByVal X As Single, ByVal Y As Single) Dim CDOSession, cdoAddressBook, olkRecipie

我正在使用下面的代码打开“全局地址列表”窗口,以选择列表中的联系人

对于选定的联系人,我还想获得经理的姓名。然而,我似乎无法让它发挥作用

有什么建议吗

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

对于Outlook对象模型,请使用AddressEntry.Manager属性


CDO 1.21不公开地址项的管理器,但您可以使用它及其对象集(它提供了CDO 1.21库的完全替换,可以在Outlook和独立版本的MAPI下运行)-它公开属性。

只需将收件人对象转换为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
Private Sub accountmanager name_MouseDown(ByVal按钮为整数,ByVal Shift为整数,ByVal x为单,ByVal Y为单)
出错时继续下一步
设置CDOSession=CreateObject(“MAPI.Session”)
'根据需要更改Outlook配置文件的名称。
CDOSession.Logon“”,False,False
如果错误号为0,则MsgBox“请确保Outlook已打开。”,“错误”
设置olkRecipients=CDOSession.AddressBook(,“选择客户经理”,0,False)
对于olkRecipients中的每个对象
accountManagerName.Text=objAE.name
AMfullName=objAE.name
'使用收件人ID将收件人对象转换为AddressEntry对象
Set objAE2=CDOSession.GetAddressEntry(objAE.ID)
AMfirstName=objAE2.fields(18)
AMlastName=objAE2.fields(22)
AMmanagerName=objAE2.Manager
'调试。打印AMfirstName
'调试。打印AMlastName
'调试。打印AMmanagerName
下一个
ccAMmanager.Caption=AMmanagerName
ccUserManager.Caption=getName(“mgrname”)
ccAMmanager。激活
设置olkRecipients=Nothing
CDOSession.Logoff
设置CDOSession=Nothing
端接头

ContactItem对象中有一个
ManagerName
属性。这就是你要找的吗?这是在exchange服务器上,我没有任何本地托管的联系人信息。。。这还能用吗?我将如何实现您的示例?(代码)在您的代码中,
objAE
的对象类型是什么?运行
Debug.Print TypeName(objAE)
查找此文件。如果它是ContactItem,那么您只需要使用objAE.ManagerName属性来获取经理的姓名。它是一个收件人对象……Ahmad Zaher的帖子中有一些代码您可以使用。但是,由于您使用的是Exchange(而不是Outlook),因此我无法帮助您进行测试。祝你好运谢谢你的建议,但是这张excel表格将被不止一个人使用,我不认为我可以在所有电脑上安装这个库。。。。