在使用 VBA 的 Excel(版本 2201)宏中,我想獲取具有顯示名稱的郵件用戶串列的 PrimarySMTP 屬性
我撰寫了一些適用于大多數情況的代碼:
Set myolApp = CreateObject("Outlook.Application")
Set myNameSpace = myolApp.GetNamespace("MAPI")
Set MyAddrList = myNameSpace.addressLists("Global Address List")
Set myAddrEntries = MyAddrList.AddressEntries(strDisplayname)
Set objExchUsr = myAddrEntries.GetExchangeUser
PrimarySMTP=objExchUsr.PrimarySMTPAddress
當顯示名稱有時會出現多個結果時,就會出現問題:getexchangeuser 函式未檢索到正確人員的 primarysmtp。
我嘗試將 UPN 而非顯示名稱傳遞給 AddressEntries 函式,但沒有成功。
有人有想法嗎?
uj5u.com熱心網友回復:
如果收件人姓名不明確,Recipient.Resolve將失敗。
您無法使用 Outlook 物件模型決議模棱兩可的名稱 - 您可以遍歷所有 GAL 條目,但這會太慢并且對于大型 GAL 容器會失敗。
在擴展 MAPI(C 或 Delphi)中,您可以使用PR_ANR限制來獲取所有匹配項(這是 Outlook 用來顯示不明確條目串列的方法)。
如果使用Redemption是一個選項,您可以使用RDOSession.AddressBook.GAL.ResolveNameEx
set Session = CreateObject("Redemption.RDOSession")
Session.MAPIOBJECT = myolApp.Session.MAPIOBJECT
set AdrrEntries = Session.AddressBook.GAL.ResolveNameEx(strDisplayname)
Debug.Print AdrrEntries.Count & " names were returned by ResolveNameEx:"
Debug.Print "------------"
for each AE in AdrrEntries
Debug.Print AE.Name
next
Debug.Print "------------"
uj5u.com熱心網友回復:
Outlook 物件模型提供了創建收件人物件的NameSpace.CreateRecipient方法。它用于根據地址簿驗證給定名稱。收件人的名稱可以是一個字串,表示收件人的顯示名稱、別名或完整的 SMTP 電子郵件地址。
Sub ResolveName()
Dim myNamespace As Outlook.NameSpace
Dim myRecipient As Outlook.Recipient
Dim CalendarFolder As Outlook.Folder
Set myNamespace = Application.GetNamespace("MAPI")
Set myRecipient = myNamespace.CreateRecipient("Eugene Astafiev")
myRecipient.Resolve
If myRecipient.Resolved Then
Set objExchUsr = myRecipient.AddressEntry.GetExchangeUser()
PrimarySMTP = objExchUsr.PrimarySMTPAddress
Else
' you need to iterate over all entries in the AB
End If
End Sub
Outlook 物件模型不為此提供任何其他內容。
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/437777.html
上一篇:洗掉第一個空行
下一篇:我是VBA新手,可以使用一些幫助。代碼突然停止作業Range類的運行時錯誤“1004”PasteSpecial方法失敗
