会議室の一覧を取得するマクロ


コメントにて以下のご要望をいただきました。


はじめまして。

マクロを使用して、現在登録されている会議室名をすべて取得したいと考えています。

どのような関数を利用して、実現するのがよいのかお知恵を拝借できれば幸いです。


登録されている会議室名というのは、Exchange サーバーの会議室メールボックスとして登録されているアカウントの名前ということでよいでしょうか?
会議室の一覧を取得するというような関数はありませんので、以下のような手順で取得する必要があります。

  1. アドレス帳の一覧からグローバル アドレス一覧を取得する
  2. グローバル アドレス一覧のエントリーから PR_DISPLAY_TYPE_EX の値が DT_ROOM であるエントリーを抽出して取得する

マクロにすると以下のようになります。
取得した会議室名をどのように使うのかがわからなかったので、この関数では会議室名を文字列の配列に格納して返しています。

' ここをトリプルクリックでマクロ全体を選択できます。
Public Function GetRooms() As String()
     On Error Resume Next
     Const PR_DISPLAY_TYPE_EX = "http://schemas.microsoft.com/mapi/proptag/0x39050003"
     Const DT_ROOM = 7
     Dim alGAL As AddressList
     Dim aeUser As AddressEntry
     Dim strRooms As String
     ' Exchange のグローバル アドレス一覧を取得
     For Each alGAL In Session.AddressLists
         If alGAL.AddressListType = olExchangeGlobalAddressList Then
             Exit For
         End If
     Next
     ' グローバル アドレス一覧から会議室メールボックスを検索
     strRooms = ""
     For Each aeUser In alGAL.AddressEntries
         If aeUser.AddressEntryUserType = olExchangeUserAddressEntry Then
             Dim lType As Long
             lType = aeUser.PropertyAccessor.GetProperty(PR_DISPLAY_TYPE_EX)
             ' PR_DISPLAY_TYPE_EX が DT_ROOM なら会議室
             If lType = DT_ROOM Then
                 strRooms = strRooms & aeUser.Name & vbTab
             End If
         End If
     Next
     ' 会議室一覧の文字列を配列に変換
     If Len(strRooms) > 0 Then
         strRooms = Left(strRooms, Len(strRooms) - 1)
         GetRooms = Split(strRooms, vbTab)
     End If
End Function

マクロの登録方法やメニューへの追加について

広告

コメントを残す

以下に詳細を記入するか、アイコンをクリックしてログインしてください。

WordPress.com ロゴ

WordPress.com アカウントを使ってコメントしています。 ログアウト / 変更 )

Twitter 画像

Twitter アカウントを使ってコメントしています。 ログアウト / 変更 )

Facebook の写真

Facebook アカウントを使ってコメントしています。 ログアウト / 変更 )

Google+ フォト

Google+ アカウントを使ってコメントしています。 ログアウト / 変更 )

%s と連携中