在parsingOutlook收件人时select多个条目的第一个条目

我有一个函数,它取得一个名称并在Outlook中parsing它,以返回所选名称的别名。 当地址簿中的选定名称有多个条目时,这将失败。 例如“Smith,Bob”和“Smith,Bob X”。 如果我试图解决的名字是“史密斯,鲍勃X”,代码工作正常,但普通的“史密斯,鲍勃”失败。

我认为当find多个条目时,Outlook会打开“检查名称”对话框(当我手动parsing名称时会发生这种情况)。

当我的代码find多个条目时,如何select第一个条目?

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),可以在特定search容器(如GAL)的内容表上创buildPR_ANR限制。 这是Outlook在parsing在“编辑”框中键入的名称时所执行的操作 – 它将遍历searchpath中的所有容器并应用PR_ANR限制。 如果find多个匹配项,则会显示一个包含该列表的对话框。 如果只有一个匹配项,则返回并停止search,否则继续searchpath中的下一个容器。

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

  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 "------------"