みなさまこんにちは、ノグチです。
Outlookでは、メールを受信した時にと音やデスクトップ通知で教えてくれますよね。
でも音や通知だと見落としたり、別に報せなくてもいいメールも知らせてくれたりして、だんだんちゃんと見なくなっていったりして…
携帯電話の着信音みたいに、特定の条件にマッチしたメールを受信した時だけ、違う方法で教えてくれたりしないかなあ…
そんなお悩みを持つあなた、Outlook VBAならできるかもしれません!
今回は、Application_NewMailExイベントで、Outlookでメールを受信したらメッセージを表示する方法をご紹介します!
Application_NewMailExイベント
Outlookでメールを受信した時に操作したい場合、Application_NewMailExイベントを使います。
このイベントは、Outlookがメールを受信するたびに実行されるイベントなので、メール受信時に何か処理をさせたいならば、このApplication_NewMailExイベントのイベントプロシージャ内に処理を差し込んでいきます。
引数EntryIDCollection
Application_NewMailExイベントには、引数EntryIDCollectionがあります。
メールや予定、カレンダーなど、Outlookのアイテムには、アイテムフォルダに保存されたタイミングで、必ず一意になるEntryIDというIDが付与されます。
Application_NewMailExイベントの引数は、このEntryIDをString型で渡してくれるのです。
GetItemFromIDメソッドでMailItemオブジェクトを取得
Outlookのアイテムに一意のIDが付与されること、Application_NewMailExイベントの引数でそのIDが渡されることは、上でご説明した通りです。
では今度は、引数で渡されたIDから受信したメールの情報を取得していきます。
使用するのは、NameSpaceオブジェクトのGetItemFromIDメソッド。
このメソッドは、NameSpace内で、引数に指定したEntryIDにマッチするアイテムを探して、取得したアイテムのオブジェクト型(メールならMailItemオブジェクト)で返してくれるメソッドです。
記述方法はこちら。
Application_NewMailExイベント内で使用するなら、記述方法のEntryIDの部分はイベントプロシージャの引数、”EntryIDCollection”がそのまま入ります。
このように。
NameSpaceオブジェクト.GetItemFromID(EntryIDCollection)
NameSpaceオブジェクトについては下記記事でご紹介していますので、こちらも併せてご覧ください。
条件にマッチしたメールを受信したらメッセージを表示する
ここまでご紹介したイベントとメソッドを使って、特定の条件を持ったメールを受信したらメッセージを表示するコードを書いてみましょう。
こんな感じになります。
Private Sub Application_NewMailEx(ByVal EntryIDCollection As String) Dim objId As Object Set myNamespace = GetNamespace("MAPI") Set objId = myNamespace.GetItemFromID(EntryIDCollection) If InStr(objId.Subject, "日報") Then MsgBox "日報が届きました!" End If End Sub
メールの件名に「日報」という文字が入っていたら、「日報が届きました!」というメッセージを表示するというコードです。
メールの情報は、GetItemFromIDメソッドで取得したMailItemオブジェクトのSubjectプロパティで取得しています。
では、こちらのメールを送信して、イベントが実行されるか試してみます。
この通り、指定したメッセージが表示されますね。
If文でMailItemオブジェクトのプロパティで取得できる値が条件とマッチするか?をチェックすればよいだけなので、条件にはSubjectプロパティ以外も使うことができますよ。
MailItemプロパティについては、下記記事でご紹介していますのでこちらをご覧ください。
条件は吟味して!
さて、ここまでApplication_NewMailExイベントについてご紹介してきましたが、注意点があります。
それは、イベントで処理したいメールの条件はじっくり吟味しましょう!ということです。
このイベント、メールが届くたびに実行されます。
つまり、条件を広めにとってしまって、例えば上のようにメッセージを表示する処理をしていたとすると、メールが届く度にメッセージが表示されることに…
メッセージの「OK」ボタンを押さない限り、メッセージが表示されている間はOutlookの操作ができなくなりますから、これが頻繁に起こるとなるとはっきり言ってめちゃくちゃ鬱陶しいです。
折角の便利なイベントなので、欲張って鬱陶しくなるより、吟味した条件でスマートに使用していきたいですね。
最後に
今回は、Application_NewMailExイベントで、Outlookでメールを受信したらメッセージを表示する方法をご紹介しました。
毎日大量のメールが来ていると、欲しいメールがその中に埋もれがちになりますよね。
今回ご紹介した方法で、本当に欲しいメールの見落としを防いでみませんか?
それでは、最後までお読みいただきありがとうございました!
連載目次:Outlook VBAでメールを操作してみよう
メーラーとして名高く、そして便利なOutlook。
Outlookのメールだって、VBAで操作することができますよ。本シリーズでは、Outlookのメールを、VBAで操作する方法をご紹介していきます。