OutolookVBAのイベントについて
仕事のタスクを開始するきっかけとなる機会が多いOutlookですが、具体的にどのようなケースがあり、VBAでどのように自動化が実現できるか説明します。
一番多いきっかけとなるイベントはメールの受信でしょうか。次にスケジュールの期限に近づいて発生するアラート等も想定されます。 そのきっかけから開始される作業をOutlookのVBAで実現するためにはまずOutlookアプリケーションオブジェクト内に定義されているイベントを利用し、きっかけをキャッチする必要があります。(なお、イベントをキャッチする機能のことをイベントレシーバーと呼びます。)
実現可能なイベントのパターンは以下の通りとなります。
参考:https://docs.microsoft.com/ja-jp/office/vba/api/outlook.application
表1 Outlookアプリケーションオブジェクトイベント一覧
イベント名 | 説明 | サンプル |
AdvancedSearchComplete | 検索が完了した後に発生 | Private Sub Application_AdvancedSearchComplete(ByVal SearchObject As Search) End Sub |
AdvancedSearchStopped | 検索が中止した後に発生 | Private Sub Application_AdvancedSearchStopped(ByVal End Sub |
BeforeFolderSharingDialog | Folderオブジェクトの [共有] ダイアログ ボックスが表示される前に発生 | Private Sub Application_BeforeFolderSharingDialog() End Sub |
ItemLoad | Outlook アイテムをメモリに読み込むときに発生 | Private Sub Application_ItemLoad() End Sub |
ItemSend | Outlook アイテムが送信されるときに発生 | Private Sub Application_ItemSend(ByVal Item As Object, Cancel As Boolean) MsgBox “件名:” & Item.Subject & “を送信しますがよいですか?” End Sub |
MAPILogonComplete | ユーザーがシステムにログオンした後に発生します。 | Private Sub Application_MAPILogonComplete() End Sub |
NewMail | メッセージを受信トレイで受信したときに発生 ルールの処理が行われるときに発生 | Private Sub Application_NewMail() End Sub |
NewMailEx | 受信トレイに新しいアイテムを受信すると発生 NewMailとの違いは、動きは同じであるが、NewMailExはIDにより受信アイテムを特定することが可能。Outlook 2003より追加。 | Private Sub Application_NewMailEx(ByVal EntryIDCollection As String) End Sub |
OptionsPagesAdd | ユーザーが Outlook の [オプション] ダイアログ ボックスの [アドイン] タブ上のオプションボタンをクリックするたびに発生 | Private Sub Application_OptionsPagesAdd(ByVal Pages As Outlook.PropertyPages) End Sub |
Quit | Microsoft Outlook が終了するときに発生 | Private Sub Application_Quit() End Sub |
Reminder | アラームが表示される直前に発生 | Private Sub Application_Reminder(ByVal Item As Object) End Sub |
Startup | Microsoft Outlook の起動中、すべてのアドイン プログラムが読み込まれた後に発生 | Private Sub Application_Startup() End Sub |
例えば、受信トレイに新規アイテムを受信したというきっかけを実現するには「NewMailEx」を利用します。 ※類似の機能で「NewMail」がありますが、「NewMailEx」は受信アイテムを特定できる機能があり、現在ではほぼこちらのイベントが利用されています。
早速以下のコードをプロジェクトのコードエリアへ貼り付けてみましょう。
Private Sub Application_NewMailEx(ByVal EntryIDCollection As String)
Dim objMail As Object
Set objMail = Session.GetItemFromID(EntryIDCollection)
MsgBox "件名:" & objMail.Subject & "を受信しました。"
End Sub
コードの貼り付け方についてはこちらをご参照ください。 貼り付けが完了したら、テストメール(件名:test)を自分あてに送信してみます。 受信後、メッセージが表示されたかと思います。
※メッセージが出ない方はマクロ実行が無効化されている場合がありますので、こちらを参考に有効化をお願いします。なお、会社によっては無効化するポリシーの場合がありますので、有効化ができるか予め社内のシステム管理者へ確認をお願いします。
このメッセージ表示部分の機能を例えばExcelファイルを開き、本文をExcelファイルへ書き込んだり、メールへ添付されているExcelファイルをフォルダへ格納したり、機能を拡張、変更していくことにより現在手動で行っている作業に近づけていきます。
またイベントを例えば送信時[ItemSend]に変更すると送信前に起動できるようになり、きっかけのタイミングを変えることができます。
今回はきっかけをキャッチするイベントについての説明でしたが、次回はイベントを検知した後にできる様々な機能について説明をしていきたいと思います。
コメントを残す