解析Outlook收件人时选择多个条目的第一个条目
问题描述:
我有一个函数,它接受一个名称并在Outlook中解析它以返回所选名称的别名。当地址簿中的选定名称有多个条目时,这将失败。例如“史密斯,鲍勃”&“史密斯,鲍勃X”。如果我试图解决的名称是“Smith,Bob X”,则代码可以正常工作,但普通的“Smith,Bob”会失败。解析Outlook收件人时选择多个条目的第一个条目
我认为当找到多个条目时,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)的内容表中的PR_ANR限制。这是Outlook在解析在“编辑”框中键入的名称时所执行的操作 - 它会遍历搜索路径中的所有容器并应用PR_ANR限制。如果找到多个匹配项,则会显示一个包含该列表的对话框。如果存在单个匹配项,则返回并停止搜索,否则继续搜索路径中的下一个容器。
Outlook对象模型但是不公开此功能。如果使用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 "------------"
我正在使用工作计算机,所以下载任何东西都不会是我的选择。所以我想这不是我能用VBA实现的事情吗? – StevenWalker
这是正确的。 –