Vba Outlook事件未触发
我正试图根据日历提醒发送电子邮件 让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
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。