mougに“メールアドレスをキーとしてExchangeグローバルアドレス一覧を検索し、名前や部署名を取得したい”との質問(https://www.moug.net/faq/viewtopic.php?t=78288)がありました。
その回答用に書いたのが以下のコードで、mougのログが流れてしまう前にメモとして残しておきます。
2019/6/19 追記:
いみひと(@nukie_53)さんから返信をいただいてコードを一部変更。
関数名は「By」の方が分かりやすそう!ついでにAddressEntryUserTypeの判定処理も変更。
GetGlobalAddressListの存在を知らなかったので、とりあえず動けばいい、という方法です。
用途として、複数のアドレスからExchangeUserを取得したかったため、作業用のメール作成コストが相対的に低かった、というのもあります。個人環境なので動作確認できていませんが、画像のような雰囲気です。 pic.twitter.com/DWEsuV1U1a
— いみひと (@nukie_53) 2019年6月18日
Public Sub Sample() Dim eu As Outlook.ExchangeUser Set eu = GetExchangeUserByAddress("hoge@hogepomehoge.onmicrosoft.com") If Not eu Is Nothing Then Debug.Print eu.Name, eu.Department, eu.PrimarySmtpAddress End If End Sub Private Function GetExchangeUserByAddress(ByVal SmtpAddress As String) As Outlook.ExchangeUser Dim myList As Outlook.AddressList Dim ae As Outlook.AddressEntry Dim eu As Outlook.ExchangeUser Dim ret As Outlook.ExchangeUser Set myList = Application.Session.GetGlobalAddressList For Each ae In myList.AddressEntries Select Case ae.AddressEntryUserType Case olExchangeUserAddressEntry, olExchangeRemoteUserAddressEntry '環境に応じて変更 Set eu = ae.GetExchangeUser If eu.PrimarySmtpAddress = SmtpAddress Then Set ret = eu Exit For End If End Select Next Set GetExchangeUserByAddress = ret End Function
処理の流れは下記の通りです。
- GetGlobalAddressListメソッドでグローバルアドレス一覧を表すAddressListオブジェクトを取得。
- AddressEntriesプロパティからAddressEntries(コレクション)オブジェクトを取得。
- For Each文で順次AddressEntryオブジェクトを取得。
- AddressEntryUserTypeプロパティによる判定。
- GetExchangeUserメソッドでExchangeUserオブジェクトを取得。
- PrimarySmtpAddressプロパティが指定したメールアドレスかどうかを判断。
- 一致した場合ExchangeUserオブジェクトを返す。
この記事へのコメントはありません。