2012-12-11 143 views
2

電子郵件地址的格式我在Excel中第一個和最後的名單,我想利用這個列表採用visual basic查找電子郵件地址,在Outlook中。Excel 2007中:從Outlook 2007

我使用下面的VB代碼:

Private Sub GetAddresses() 
    Dim o, AddressList, AddressEntry 
    Dim c As Range, r As Range, AddressName As String 
    Set o = CreateObject("Outlook.Application") 
    Set AddressList = o.Session.AddressLists("Global Address List") 
    Set r = Range("a1:a3") 
    For Each c In r 
     AddressName = Trim(c.Value) & ", " & Trim(c.Offset(0, 1).Value) 
     For Each AddressEntry In AddressList.AddressEntries 
      If AddressEntry.Name = AddressName Then 
       c.Offset(0, 2).Value = AddressEntry.Address 
       Exit For 
      End If 
     Next AddressEntry 
    Next c 
    End Sub 

代碼似乎是工作的罰款,直至實際檢索電子郵件地址的地步。它匹配一個名稱後,返回以下地址而不是地址。有誰知道我做錯了什麼。

/O=Compnay/OU=Company/cn=Recipients/cn=shs 

在此先感謝您的幫助。

回答

5

我假定這些域用戶。您想要從exchangeUser對象獲取SMTP地址。我已更新您的代碼以顯示此內容。

Private Sub GetAddresses() 
    Dim o, AddressList, AddressEntry 
    Dim c As Range, r As Range, AddressName As String 
    'added variable for exchange user object 
    Dim exchangeUser As Outlook.exchangeUser 

    Set o = CreateObject("Outlook.Application") 
    Set AddressList = o.Session.AddressLists("Global Address List") 
    Set r = Range("a1:a3") 
    For Each c In r 
     AddressName = Trim(c.Value) ' & ", " & Trim(c.Offset(0, 1).Value) 
     For Each AddressEntry In AddressList.AddressEntries 
      If AddressEntry.Name = AddressName Then 
      'set the exchange user object 
      Set exchangeUser = AddressEntry.GetExchangeUser 
      'get the smtp addresss 
      c.Offset(0, 2).Value = exchangeUser.PrimarySmtpAddress 
      'release 
      Set exchangeUser = Nothing 
       Exit For 
      End If 
     Next AddressEntry 
    Next c 
End Sub 
+2

+1我剛開這基於相同的問題,我在前面已經和制定了一項功能......但很可惜,你得到了它第一。好一個! –

+0

Sorceri - 這就像一個魅力。非常感謝。所以,爲了確保我明白這一點,我正在訪問錯誤的對象,是的?再次感謝。 – Mutuelinvestor

+0

@Mutuelinvestor很高興幫助!不要忘記標記爲答案! – Sorceri

0

哎唷!爲什麼要循環訪問地址列表中可能包含數十個條目的所有項目?使用Aplication.Sesssion.CreateRecipient,然後調用Recipient.Resolve。如果成功,您可以從Recipient.AddressEntry中檢索AddressEntry對象。
如果你需要確保的名稱只與GAL解決(順便說一下,你不應該硬編碼的GAL名字,這將是不同的基於區域),可以使用Redemption及其AddreessList.ResolveName方法 - 你所需要的要做的就是調用RDOSession.AddressBook.GAL.ResolveName