Office関連

メールアドレスからExchangeUserを取得するOutlookマクロ

moug“メールアドレスをキーとしてExchangeグローバルアドレス一覧を検索し、名前や部署名を取得したい”との質問(https://www.moug.net/faq/viewtopic.php?t=78288)がありました。

その回答用に書いたのが以下のコードで、mougのログが流れてしまう前にメモとして残しておきます。

2019/6/19 追記:
いみひと(@nukie_53)さんから返信をいただいてコードを一部変更。
関数名は「By」の方が分かりやすそう!ついでにAddressEntryUserTypeの判定処理も変更。

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

処理の流れは下記の通りです。

  1. GetGlobalAddressListメソッドでグローバルアドレス一覧を表すAddressListオブジェクトを取得。
  2. AddressEntriesプロパティからAddressEntries(コレクション)オブジェクトを取得。
  3. For Each文で順次AddressEntryオブジェクトを取得。
  4. AddressEntryUserTypeプロパティによる判定。
  5. GetExchangeUserメソッドでExchangeUserオブジェクトを取得。
  6. PrimarySmtpAddressプロパティが指定したメールアドレスかどうかを判断。
  7. 一致した場合ExchangeUserオブジェクトを返す。

関連記事

  1. Office関連

    [PowerShell]Word文書の透かし文字を変更するスクリプト

    MSDNフォーラムに「PowerShellを使って、Word文書の透か…

  2. Office関連

    格子状にガイドを追加するPowerPointマクロ

    前回の記事で、PowerPoint 2013で追加されたGuide、G…

  3. Office関連

    [Office 2013]オンライン テンプレートを無効にする。

    前回の記事ではOffice 2013でSkyDriveを無効にする方法…

コメント

  • コメント (0)

  • トラックバックは利用できません。

  1. この記事へのコメントはありません。

Time limit is exhausted. Please reload CAPTCHA.

最近の記事

アーカイブ

RapidSSL_SEAL-90x50
PAGE TOP