こんにちは、くのへ@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
でも、一応コピペすると、メールを閉じた時に「閉じる前に動いています」って表示される!!キター😆
ではまた別の記事で~
🦅バサバサ~