gpt4 book ai didi

vba - 以编程方式向项目添加事件处理程序

转载 作者:行者123 更新时间:2023-12-02 04:35:46 25 4
gpt4 key购买 nike

我正在为我的待办事项列表中的一些项目提供自定义属性,并且我想在该属性更改时执行特定事件。有没有一种方法可以编写事件处理程序来处理 olFolderToDo 中所有项目的 CustomPropertyChange 事件,或者以编程方式向项目添加事件处理程序以便我可以添加事件处理程序何时将新项目添加到文件夹?

我过去笨拙地处理过这个问题,方法是将我的代码放在文件夹的 ItemsChange 的事件处理程序中,然后检查属性的值(例如,当我想触发action 一旦任务被标记为完成,我会观察项目的变化,然后检查项目是否被标记为完成),但这不会处理对属性的任意更改,并且需要小心处理以避免连续多次触发。

我目前所做的示例:

Public WithEvents Items As Outlook.Items

Private Sub Application_Startup()
Set Items = Application.GetNamespace("MAPI").GetDefaultFolder(olFolderToDo).Items
End Sub

Private Sub Items_ItemChange(ByVal Item As Object)
If TypeOf Item Is Outlook.TaskItem Then
If Item.Status = olTaskComplete Then
DoTheThing
End If
ElseIf TypeOf Item Is Outlook.MailItem Then
If Item.FlagStatus = olFlagComplete Then
DoTheThing
End If
End If
End Sub

最佳答案

CustomPropertyChange当一个项目的自定义属性(它是父对象的一个​​实例)被更改时,事件被触发。为了能够处理该事件,您必须分别订阅 Outlook 中的每个项目,这不是一个好主意。更好的解决方案是订阅 ItemChange Items 类的事件,当指定集合中的项目发生更改时触发。在这种情况下,您可以监控文件夹,而不是单个文件夹。但它不会告诉您更改了哪些属性。但是,您可以保留两个用于同步值的自定义属性(第一个用于源属性值,第二个用于旧值,因此您将能够弄清楚哪些属性发生了变化,哪些是旧值)。

作为解决方法,您可以考虑使用 Outlook 所基于的低级 API - 扩展 MAPI。在那里您可以找到 fnevObjectModified 通知。参见 Event Notification in MAPI想要查询更多的信息。请注意,您可以使用托管代码中扩展 MAPI 的任何包装器来访问低级通知(例如,Redemption 或 MAPI Store Accessor)。

关于vba - 以编程方式向项目添加事件处理程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43419851/

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