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
Excel 解析Outlook收件人时选择多个条目中的第一个条目_Excel_Vba_Outlook - Fatal编程技术网

Excel 解析Outlook收件人时选择多个条目中的第一个条目

Excel 解析Outlook收件人时选择多个条目中的第一个条目,excel,vba,outlook,Excel,Vba,Outlook,我有一个函数,它接受一个名称并在Outlook中解析该名称,以返回所选名称的别名。当通讯簿中的选定名称有多个条目时,此操作失败。e、 g.“史密斯,鲍勃”和“史密斯,鲍勃X”。如果我试图解析的名称是“Smith,Bob X”,那么代码工作正常,但简单的“Smith,Bob”失败 我假设在找到多个条目时,Outlook会打开“检查名称”对话框(当我手动解析名称时会出现这种情况) 当我的代码找到多个条目时,如何选择第一个条目 Function GETTPX(ByVal UserName As Str

我有一个函数,它接受一个名称并在Outlook中解析该名称,以返回所选名称的别名。当通讯簿中的选定名称有多个条目时,此操作失败。e、 g.“史密斯,鲍勃”和“史密斯,鲍勃X”。如果我试图解析的名称是“Smith,Bob X”,那么代码工作正常,但简单的“Smith,Bob”失败

我假设在找到多个条目时,Outlook会打开“检查名称”对话框(当我手动解析名称时会出现这种情况)

当我的代码找到多个条目时,如何选择第一个条目

Function GETTPX(ByVal UserName As String) As String
Dim objOL As Object
Dim oRecip As Outlook.Recipient
Dim oEU As Outlook.ExchangeUser
Dim oEDL As Outlook.ExchangeDistributionList

Set objOL = CreateObject("Outlook.Application")

Set oRecip = objOL.Session.CreateRecipient(UserName)
oRecip.Resolve
If oRecip.Resolved Then
    Set oEU = oRecip.AddressEntry.GetExchangeUser
End If
GETTPX = oEU.Alias

Set oRecip = Nothing
Set objOL = Nothing

End Function

在扩展MAPI级别(仅限C++或Delphi)上,您可以对特定搜索容器(如GAL)的内容表创建PRU ANR限制。当Outlook解析您在“收件人”编辑框中键入的名称时,它会遍历搜索路径中的所有容器并应用PR_ANR限制。如果找到多个匹配项,它将显示一个包含列表的对话框。如果存在单个匹配项,则返回该匹配项并停止搜索,否则将继续搜索路径中的下一个容器

但是,Outlook对象模型不公开此功能。如果使用(任何语言)是一个选项,它将公开.resolvenamex和.resolvenamex,这将返回匹配项列表

  set Session = CreateObject("Redemption.RDOSession")
  Session.MAPIOBJECT = Application.Session.MAPIOBJECT
  set AdrrEntries = Session.AddressBook.ResolveNameEx("john")
  Debug.Print AdrrEntries.Count & " names were retruned by ResolveNameEx:"
  Debug.Print "------------"
  for each AE in AdrrEntries
    Debug.Print AE.Name
  next
  Debug.Print "------------"

我使用的是一台工作电脑,所以下载任何东西恐怕都不是一个选择。所以我想这不是我用VBA就能做到的?