gpt4 book ai didi

vba - Outlook 事件未触发

转载 作者:行者123 更新时间:2023-12-03 09:07:26 25 4
gpt4 key购买 nike

我正在尝试根据日历提醒发送电子邮件。

我无法让 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

我在信任中心的“启用所有宏”中有宏设置。

我搜索了 google、stackoverflow 和许多其他网站,并阅读了 Microsoft.com 上的文档。

我在运行 Windows 10 企业版的电脑上使用 Outlook 2016。

最佳答案

类模块只是对象的蓝图。类模块本身并不存在,在运行时类模块只是对象变量可以声明为的类型

您的代码很好(除了泄漏的公共(public)字段)。

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

'[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 WithEvents 字段:

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

关于vba - Outlook 事件未触发,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46002026/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com