ナビゲーション ウィンドウの右クリック メニューでフォルダの情報を取得するマクロ


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


Outlook VBAに関する情報が少なく本サイトは頼りにしています。
Outlook2010をExchange環境で使用しています。

右クリックメニューからの動作で困っています。
ナビゲーションウィンドウで受信トレイ等のフォルダを選択表示している状態で、
他のフォルダ(メールフォルダやデータフォルダ)を選択表示させずに右クリックした際に、
標準モジュールのサブルーチンから右クリックしたフォルダに対して制御を行いたいのですが、
このフォルダの取得方法がわかりません。
CurrentやSelectionでは選択表示されているフォルダが取得されます。(当然ですが)

何か方法をご存じないでしょうか。


Outlook でナビゲーションウィンドウのフォルダーを右クリックした場合、Application オブジェクトの FolderContextMenuDisplay というイベントが起動されます。
このイベントの Folder パラメータにより、右クリックされたフォルダーの情報の取得が可能です。
ただ、おそらくは処理の流れとしてはフォルダーを右クリックした後に、表示されるコンテキスト メニューからマクロを呼び出して実行するというようなものになるでしょう。
つまり、このイベント自体で処理をするのではなく、メニューをクリックして起動されるマクロで処理を行うので、フォルダーの情報をこのイベントからマクロに引き継ぐ必要があります。
そのような処理を行うためには、FolderContextMenuDisplay の中でマクロ起動のボタンを追加し、その際に Parameter としてフォルダーのエントリ ID を保存します。
この Parameter に保存した値は、ボタンをクリックして起動されるマクロの中で、ActiveExplorer.CommandBars.ActionControl.Parameter として取得が可能です。
たとえば、右クリックしたフォルダーの表示名を表示するというようなマクロは以下のようになります。

' 以下は ThisOutlookSession で定義するマクロです。  
Private Sub Application_FolderContextMenuDisplay(ByVal CommandBar As CommandBar, ByVal Folder As Folder)
    Dim cmdFolder As Office.CommandBarButton
    ' ボタンを追加
    Set cmdFolder = CommandBar.Controls.Add(msoControlButton)
    With cmdFolder
        ' 呼び出すマクロを指定 (Module1.bas に保存された DisplayFolder を起動)
        .OnAction = "Project1.Module1.DisplayFolder"
        ' パラメーターにフォルダーのエントリ ID を保存
        .Parameter = Folder.EntryID
        .Caption = "フォルダ情報の表示"
    End With
End Sub
'
' 以下は標準モジュール Module1 に定義するマクロです。
Public Sub DisplayFolder()
    Dim strEid As String
    Dim fldClicked As Folder
    ' ボタンのパラメーターからフォルダーのエントリ ID を取得
    strEid = ActiveExplorer.CommandBars.ActionControl.Parameter
    ' エントリ ID からフォルダを取得
    Set fldClicked = Session.GetFolderFromID(strEid)
    ' フォルダの情報を表示
    MsgBox "フォルダー名: " & fldClicked.Name & vbCrLf _
        & "アイテム数: " & fldClicked.Items.Count _
        , vbOKCancel, "クリックされたフォルダー"
End Sub

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

広告

コメントを残す

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

WordPress.com ロゴ

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

Twitter 画像

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

Facebook の写真

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

Google+ フォト

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

%s と連携中