Outlook events not firing

岁酱吖の 提交于 2020-01-04 09:26:10

问题


I'm trying to send an email based on a calendar reminder going off.

I'm having trouble getting VBA macros to recognize that an Outlook event has occurred.

I put this code in a Class Module:

Public WithEvents myOlApp As Outlook.Application

Sub Initialize_handler()
    Set myOlApp = Outlook.Application 'also tried with double quotes around "Outlook.Application"
End Sub

Private Sub myOlApp_Reminder(ByVal Item As Object)
    MsgBox ("test")
End Sub

Private Sub myOlApp_NewMail()
    MsgBox ("test")
End Sub

When I get a new email or a reminder goes off, nothing happens.

I've tested with this macro in a normal module and it works:

Sub MsgBoxTest()
    MsgBox ("test")
End Sub

I have macro settings on "Enable all macros" in the Trust Center.

I've searched google, stackoverflow, a bunch of other websites, and read the documentation on Microsoft.com.

I'm on Outlook 2016 on a PC running Windows 10 Enterprise.


回答1:


For this method, often used in documentation, run Initialize_handler manually or run it at startup in the special class module ThisOutlookSession.

Private Sub Application_Startup()
    Initialize_handler
End Sub



回答2:


A class module is just a blueprint for an object. A class module doesn't exist all by itself, at runtime a class module is just a type that an object variable can be declared as.

Your code is fine (leaked public field aside).

You're just missing an instance of that class. Keep the class and make ThisOutlookSession create an instance of it:

'[ThisOutlookSession]
Option Explicit
Private AppEvents As AppEventsHandler

Private Sub Application_Startup()
    Set AppEvents = New AppEventsHandler
End Sub

Private Sub Application_Quit()
    Set AppEvents = Nothing
End Sub

VBA classes fire an Initialize event on creation, and a Terminate event on destruction. Handle them to set your Private WithEvents field:

'[AppEventsHandler] (class module)
Option Explicit
Private WithEvents app As Outlook.Application

Private Sub Class_Initialize()
    Set app = Outlook.Application
End Sub

Private Sub Class_Terminate()
    Set app = Nothing
End Sub

Private Sub app_NewMail()
    'TODO handle app event
End Sub

Private Sub app_Reminder(ByVal Item As Object)
    'TODO handle app event
End Sub

'...more handlers...

That's it - now you're handling Outlook.Application events in a dedicated class, without polluting ThisOutlookSession with the nitty-gritty details of every event handler out there.




回答3:


In order to handle Reminder events, you need to enclose your code in a Sub named "Application_Reminder"

Try this:

Option Explicit

Private Sub Application_Reminder(ByVal Item As Object)
    MsgBox "Test"
End Sub


来源:https://stackoverflow.com/questions/46002026/outlook-events-not-firing

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!