Vba Outlook事件未触发

Vba Outlook事件未触发,vba,outlook,Vba,Outlook,我正试图根据日历提醒发送电子邮件 让VBA宏识别Outlook事件发生时遇到问题 我将此代码放在一个类模块中: 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

我正试图根据日历提醒发送电子邮件

让VBA宏识别Outlook事件发生时遇到问题

我将此代码放在一个类模块中:

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
当我收到一封新的电子邮件或提醒时,什么也没发生

我已经在普通模块中测试了此宏,它可以工作:

Sub MsgBoxTest()
    MsgBox ("test")
End Sub
我在信任中心有“启用所有宏”的宏设置

我搜索过谷歌、stackoverflow和其他一些网站,并阅读了Microsoft.com上的文档


我在运行Windows 10 Enterprise的PC上运行Outlook 2016。

为了处理提醒事件,您需要将代码包含在名为“应用程序提醒”的子部分中

试试这个:

Option Explicit

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

对于文档中经常使用的此方法,请手动运行
初始化\u处理程序
,或在启动时在特殊类模块
ThisOutlookSession
中运行它

Private Sub Application_Startup()
    Initialize_handler
End Sub
类模块只是对象的蓝图。类模块本身并不存在,在运行时,类模块只是一种对象变量可以声明为的类型

您的代码很好(泄漏的公共字段除外)

您只是缺少该类的一个实例。保留该类,并创建该类的实例:

'[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类在创建时触发
Initialize
事件,在销毁时触发
Terminate
事件。处理它们以设置您的
Private with events
字段:

'[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...

就是这样-现在您在一个专用类中处理
Outlook.Application
事件,而不会污染
ThisOutlookSession
,其中包含每个事件处理程序的详细信息。

您忘了指出代码进入了ThisOutlookSession。