OutLook vba で 送受信の完了を検知する

OutLookで、送受信の完了を検知したい。

 

まずはクラスモジュールを作成します。

名前はClass1です。

 

Dim WithEvents mySync As Outlook.SyncObject

Sub Initialize_handler()
    Set mySync = Application.Session.SyncObjects.Item(1)
    mySync.Start
End Sub

Private Sub mySync_SyncEnd()
    MsgBox "送受信が完了しました"
End Sub

 

次に標準モジュールで、変数を宣言します。

Public CompleteObj As Object

 

そしてThisOutlookSession に次のコードを記述します。

Private Sub Application_Startup()
  Set CompleteObj = New Class1
  Call CompleteObj .Initialize_handler
End Sub

 

これで送受信を行ったときに、「送受信が完了しました」と表示されます。

が、これだけだと、メールを送信して、受信も行ったときには、検知されません。

次のコードをThisOutlookSession に追加します。

 

Private Sub Application_ItemSend(ByVal Item As Object, Cancel As Boolean)
    Set CompleteObj = New Class1
    Call CompleteObj .Initialize_handler
End Sub

 

これで送信時も、送受信完了が検知されるようになりました。