2017-10-09 41 views
1

我正在尝试使用VBA从Excel中获取公司全局Outlook通讯录。现在,它设置为查看工作表中选定的单元格(假设选择包含userids)并循环遍历每个用户标识(别名),并提供有关它是否位于地址簿中的简单消息。Excel VBA Outlook.Recipients.Add(“Alias”) - 处理未解决的项目

我的问题是我工作的公司有不同长度的别名,取决于你的工作职能是什么(例如,现场员工是14个字符,总部员工是6个字符)。在某些情况下,总部员工的别名将与现场助理的前6个字符匹配(例如,pbogar & pbogart.s04598)。在这些情况下,别名(pbogar)无法解析。如果有多个用户共享一个别名的相同字符,是否有显示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 

回答

0

没有什么可以做,使用Outlook对象模型 - 它或者是扩展MAPI(C++或Delphi只),或Redemption(任何语言)。在兑换中,如果需要,您可以使用RDOMail.Recipients.ResolveAlltrue)显示地址簿提示(包括模糊的收件人提示)。您也可以使用RDOSession.Addressbook.ResolveName(name, **true**).

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