アイテムに対してマクロを実行する際の記述方法


Outlook でアイテムに対して何らかのマクロを動作させるという場合、主に以下のような方法があります。

  1. ダブルクリックして開いたアイテムに対して実行する
  2. アイテム一覧で選択したアイテムに対して実行する
  3. メッセージを受信したタイミングで実行する
  4. 自動仕分けで実行する

このブログのマクロも上記のいずれかのパターンで動作させていますが、状況によってはほかのタイミングで動作させたいということもあるでしょう。

今回は、下記の単に件名を表示するだけのマクロを例に、上記のそれぞれのタイミングで実行するための記述方法についてまとめてみました。

Private Sub DisplaySubject( objItem As MailItem )
    MsgBox objItem.Subject
End Sub

1. ダブルクリックして開いたアイテムに対して実行する

アイテムをダブルクリックして開くと、そのアイテムは ActiveInspector と呼ばれるオブジェクトの CurrentItem から参照できます。
そのため、以下のような記述でダブルクリックして開いたアイテムについて上記のマクロが実行できます。

Public Sub DisplaySubjectActive()
    DisplaySubject ActiveInspector.CurrentItem
End Sub

2. アイテム一覧で選択したアイテムに対して実行する

アイテム一覧で選択したアイテムは、ActiveExplorer の Selection により参照できます。アイテムは複数選択できるため、Selection(1) というように番号を付けて選択したアイテムを取得します。
以下は、最初に選択したアイテムで上記のマクロを実行するマクロです。

Public Sub DisplaySubjectSelected()
    DisplaySubject ActiveExplorer.Selection(1)
End Sub

3. 上記の二つを自動選択して実行する

現在アクティブなウィンドウを自動的に識別して実行してくれたら便利かもしれません。
以下は、そのようなマクロの記述方法です。

Public Sub DisplaySubjectAuto()
    If TypeName(ActiveWindow) = "Explorer" Then
        DisplaySubject ActiveExplorer.Selection(1)
    Else
        DisplaySubject ActiveInspector.CurrentItem
    End If
End Sub

4. メッセージを受信したタイミングで実行する

このブログのマクロではよく使われますが、受信したタイミングでマクロを実行するには Application_NewMailEx イベントを使用します。

Private Sub Application_NewMailEx(ByVal EntryIDCollection As String)
    Dim objItem
    Set objItem = Session.GetItemFromID(EntryIDCollection)
    If TypeName(objItem) = "MailItem" Then
        DisplaySubject objItem
    End If
End Sub

5. 自動仕分けで実行する

自動仕分けで実行するには Public として定義し、引数は必ず ByRef で MailItem 型の変数を一つだけ指定する必要があります。

Public Sub DisplaySubjectByRule( ByRef objItem As MailItem)
    DisplaySubject objItem
End Sub

 

このブログやほかのサイトなどで見つけたマクロで、実行タイミングを変えたいという場合には、上記の記述を参考にしてみてください。

広告

コメントを残す

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

WordPress.com ロゴ

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

Twitter 画像

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

Facebook の写真

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

Google+ フォト

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

%s と連携中