アイテム一覧の右クリックメニューにマクロを追加する方法


コメントで以下のようなご要望をいただきました。


Outlook2010にサイトのマクロをカスタマイズして使っています。
大変快適な環境になっております。

メール画面で右クリック時のショートカットメニューにマクロを割り振る方法をアドバイス頂けますか。
例えば
右クリック
メール移動
>分類(仕事)+仕事メールフォルダー
>分類(プライベート)+プライベートメールフォルダー

などマクロでメールアイテムを分類し、別のプロファイル(仕事.pst)にコピーするというものです。
メール移動のマクロは既に作成していますが、リボンに割り振っているためその都度マウスでリボンまで移動し選択するので、ショートカットに割り振れれば作業効率が良くなるのではと思っております。

あわせて、組み込んだマクロにアイコンをつけたいと思っております。
ExcelだとFaceIdがあり、アイコンを割り振ることができますが、Outlookでは可能なのでしょうか。


Outlook 2010 でアイテムの右クリックにより表示されるコンテキスト メニューをカスタマイズするには、Application の ItemContextMenuDisplay イベントを使用します。
このイベントはコンテキスト メニューが表示されるタイミングで呼び出されるもので、引数として渡された CommandBar オブジェクトにボタンを追加すると、それがコンテキスト メニューに表示される動作となります。
なお、この CommandBar オブジェクトは Office 製品に共通のオブジェクトであるため、Excel と同様に FaceId を使ってアイコンを設定することが可能です。

マクロは以下の通りになります。ちなみに、単に分類項目を割り当ててメッセージを移動するというだけであれば、クイック操作でも設定可能です。

' ここをトリプルクリックでマクロ全体を選択できます。
Private Sub Application_ItemContextMenuDisplay(ByVal oCommandBar As Office.CommandBar, ByVal oSelection As Selection)
    If oSelection.Count > 0 Then
        Dim objPopup As CommandBarPopup
        Dim objButton1 As CommandBarButton
        Dim objButton2 As CommandBarButton
        ' 親メニュー
        Set objPopup = oCommandBar.Controls.Add(msoControlPopup, , , , True)
        objPopup.Caption = "メール移動"
        ' サブメニュー 1
        Set objButton1 = objPopup.Controls.Add(msoControlButton, , , , True)
        With objButton1
            .Style = msoButtonIconAndCaption
            .Caption = "仕事"
            .FaceId = 1100
            .OnAction = "Project1.ThisOutlookSession.CategorizeAsWork"
        End With
        ' サブメニュー 2
        Set objButton2 = objPopup.Controls.Add(msoControlButton, , , , True)
        With objButton2
            .Style = msoButtonIconAndCaption
            .Caption = "プライベート"
            .FaceId = 225
            .OnAction = "Project1.ThisOutlookSession.CategorizeAsPrivate"
        End With
    End If
End Sub
' サブメニュー 1 で呼び出されるマクロ
Private Sub CategorizeAsWork()
    Dim fldDest As Folder
    ' 移動先は受信トレイの下の「仕事」フォルダー
    Set fldDest = Session.GetDefaultFolder(olFolderInbox).Folders("仕事")
    CategorizeMessage "仕事", fldDest
End Sub
' サブメニュー 2 で呼び出されるマクロ
Private Sub CategorizeAsPrivate()
    Dim fldDest As Folder
    ' 移動先は受信トレイの下の「プライベート」フォルダー
    Set fldDest = Session.GetDefaultFolder(olFolderInbox).Folders("プライベート")
    CategorizeMessage "プライベート", fldDest
End Sub
' メッセージに分類項目をつけて移動するマクロ
Private Sub CategorizeMessage(strCategory As String, fldDest As Folder)
    Dim objMsg As MailItem
    ' 選択されているメッセージすべてに対して処理を行う
    For Each objMsg In ActiveExplorer.Selection
        ' 分類項目を設定
        objMsg.Categories = strCategory
        ' メッセージを移動
        objMsg.Move fldDest
    Next
End Sub

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

広告

アイテム一覧の右クリックメニューにマクロを追加する方法」への7件のフィードバック

  1. ショートカットメニューにメニューを割り振るとかなり使えると思います。
    質問ですが、メール、連絡先、タスク、履歴でそれぞれ、ショートカットメニューを変えることは可能でしょうか。

    • ItemContextMenuDisplay イベントに渡される Selection に格納されるアイテムの種類を判別し、それぞれの種類ごとのメニュー表示を行うことで対応可能です。
      たとえば、以下のようにします。

      Private Sub Application_ItemContextMenuDisplay(ByVal oCommandBar As Office.CommandBar, ByVal oSelection As Selection)
      If oSelection.Count > 0 Then
      Select Case oSelection(1).MessageClass
      Case “IPM.Note”
      ‘ メールのメニュー表示
      Case “IPM.Contact”
      ‘ 連絡先のメニュー表示
      Case “IPM.Task”
      ‘ タスクのメニュー表示
      Case “IPM.Journal”
      ‘ 履歴のメニュー表示
      End Select
      End If
      End Sub

  2. かなり便利に使えると思います。
    改造をしたいので質問ですが、移動先をデフォルトの受信トレイの下のフォルダー でなく、アーカイブの受信トレイの下のフォルダーにしたいのですが、可能でしょうか?

    • 可能です。
      たとえば、”アーカイブ” の下の “受信トレイ” の下の “仕事” なら以下のように指定します。

      Set fldDest = Session.Folders(“アーカイブ”).Folders(“受信トレイ”).Folders(“仕事”)

  3. かなり便利に使えると思います。改造をしたいので質問ですが、
    移動先の受信トレイの下の「仕事」フォルダー から、アーカイブの受信トレイの下のフォルダーにしたいのですが可能ですか?

  4. 追加したい分類項目ごとに以下のように記述を増やします。

    1. End With の次に以下のようなコードを追加します。(# には 3、4 のように数字を指定し、XXXXX には追加する分類項目を指定します)

    ‘ サブメニュー #
    Set objButton = objPopup.Controls.Add(msoControlButton, , , , True)
    With objButton#
    .Style = msoButtonIconAndCaption
    .Caption = “プライベート”
    .FaceId = 225
    .OnAction = “Project1.ThisOutlookSession.CategorizeAsXXXXX”
    End With

    2. 以下のようなコードを最後に追加します。(# と XXXXX は上記で指定したもの)

    ‘ サブメニュー # で呼び出されるマクロ
    Private Sub CategorizeAsXXXXX()
    Dim fldDest As Folder
    ‘ 移動先はアーカイブの受信トレイの下の「XXXXX」フォルダー
    Set fldDest = Session.Folders(“アーカイブ”).Folders(“受信トレイ”).Folders(“XXXXX”)
    CategorizeMessage “XXXXX”, fldDest
    End Sub

コメントを残す

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

WordPress.com ロゴ

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

Twitter 画像

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

Facebook の写真

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

Google+ フォト

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

%s と連携中