Excel VBA Outlook.Recipients.Add(“别名”) – 处理未解决的项目

我正在尝试使用VBA从Excel中获取公司全球通讯录地址簿。 现在,它设置为查看工作表中的一组单元格(假设select包含userids)并遍历每个userid(别名),并提供一个简单的消息,以确定它是否在通讯簿中。

我所遇到的问题是我工作的公司有不同长度的别名,取决于你的工作职能(例如,现场员工是14个字符,总部员工是6个字符)。 在某些情况下,HQ关联的别名将与字段关联的前6个字符匹配(例如,pbogar&pbogart.s04598) 。 在这些情况下,别名(pbogar)无法parsing。 有没有办法显示相同的“检查用户”对话框,Outlook将显示如果有多个用户共享相同的字符的别名? 或者确保当它通过这个代码馈送时,它只查看全局地址簿中某个字符长度的别名?

码:

Sub UserID_From_Email_Selection() Dim OutApp As Object Dim OutMail As Object Dim Recip As Object Dim Cell As Range On Error GoTo err Set OutApp = CreateObject("Outlook.Application") Set OutMail = OutApp.CreateItem(0) On Error Resume Next For Each Cell In Selection If Cell.Value <> "" Then Set Recip = OutMail.Recipients.Add(Cell.Value) Recip.Resolve If Recip.resolved Then MsgBox (Recip & ": Resolved") Else MsgBox (Recip & ": Unresolved") End If Recip.Delete Set Recip = Nothing End If Next Cell On Error GoTo err Set OutMail = Nothing Set OutApp = Nothing Exit Sub err: On Error Resume Next Set Recip = Nothing Set OutMail = Nothing Set OutApp = Nothing End Sub 

使用Outlook对象模型可以做的事情不多 – 它是扩展MAPI(仅限于C ++或Delphi)或Redemption (任何语言)。 在赎回中,您可以使用RDOMail .Recipients.ResolveAlltrue )来显示地址簿提示(包括模糊的收件人提示)(如有必要)。 您也可以使用RDOSession .Addressbook.ResolveName(name, **true**).

为避免这样的问题,您可能需要存储SSMTP地址(始终是唯一的)而不是login别名。