009 Outlook VBA メールを閉じた時に動くマクロ(閉じるイベント)

こんにちは、くのへ@MasazaneKunoheです。

Outlook VBAで「メールを閉じた時に自動で動くマクロ」の基本コードを纏めました。

閉じた時に動くマクロ

メールを閉じる操作は.closeで出来ますが、閉じた時に動くマクロは.closeではなくイベントを使います。

その基本コードは↓こちら。

↓コピペで動くと思います。でも、イベント系マクロなので標準モジュールだと動きません。ThisOutlookSessionに入れて下さい(コードの次の図参照)
また、書いた後にOutlookを再起動して下さい。


'myMailItem、myInspetorsをイベントのアイテムとして使えるようにする(呪文と思って可)
Private WithEvents myMailItem As Outlook.MailItem
Private WithEvents myInspectors As Outlook.Inspectors

Private Sub Application_Startup()
'Outlook起動時にmyInspctorsをInspetorsオブジェクトとして定義
  Set myInspectors = Application.Inspectors
End Sub

Private Sub myInspectors_NewInspector(ByVal Inspector As Inspector)
'メールなどのアイテムを開く時に、「myMailItem」に開いたアイテムを登録する

  If Inspector.CurrentItem.Class = olMail Then
    Set myMailItem = Inspector.CurrentItem
  Else
    Set myMailItem = Nothing
  End If
End Sub

Private Sub myMailItem_Close(Cancel As Boolean)

  If myMailItem = "" Then Exit Sub

  MsgBox " 閉じる前に動いてます"
 
End Sub

↓ThisOutlookSessionはこちら

動いているところの動画

こんな感じで、メールを閉じる前に動きます

解説

ややこしいコードですね。

①まずは呪文を二つ唱えて、myMailItemとmyInspectorsをイベントアイテムとして使えるようにします。

②次に、Application_Startup()というイベントマクロで、Outlook起動時にmyInspectorsを宣言して、インスペクターを使えるようにします。

(Outlook VBAの世界では開いたメールのウィンドウをインスペクターって言います)

③更に、myInspectors_NewInspector(ByVal Inspector As Inspector)の部分で、Set myMailItem = Inspector.CurrentItemってやって、今選択中のインスペクターのアイテムをmyMailItemに突っ込みます。

ただし、myMailItemがメールオブジェクトなので、タスクアイテムなどが代入されるとエラーが出ます。
そこで、If文でインスペクターがメールアイテムかどうかを判断しています。

④最後にPrivate Sub myItem_Close(Cancel As Boolean)というcloseイベントを使って、アイテムを閉じる前に動くマクロの出来上がり!!

超ややこしいw

でも、一応コピペすると、メールを閉じた時に「閉じる前に動いています」って表示される!!キター😆

ではまた別の記事で~
🦅バサバサ~

感想等はツイッターにお願いします。こちら。

くのへスタジオはこちら。

Outlook-VBAコーナーはこちら。

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です