gpt4 book ai didi

vba - 当多个项目一次添加到 Outlook 文件夹时,如何触发事件?

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

我经常在 VBA 和 Outlook 中使用事件处理程序。其中之一是将被删除的任何项目标记为已读。

Private Sub deletedItems_ItemAdd(ByVal Item As Object)
Application_Startup
On Error Resume Next
Item.UnRead = False

End Sub

通过以下方式声明:
Private WithEvents deletedItems As Outlook.Items

并在 Application_Startup 中初始化作为:
Dim olNameSpace As Outlook.NameSpace
Set olNameSpace = olApp.GetNamespace("MAPI")
Set deletedItems = olNameSpace.GetDefaultFolder(olFolderDeletedItems).Items

不幸的是,如果我一次删除多个项目,这不会影响所有项目。

有没有办法以某种方式劫持这个过程?我考虑使用 _beforeDelete事件,但您每次都必须正确设置该项目,如果我能做到这一点,无论如何都不会存在这个问题。

显然我不清楚 - 我的用例是当我通过收件箱、草稿等中的删除键删除邮件时。

最佳答案

你不必。

我对你的问题很好奇所以我打开 Outlook 并在 ThisOutlookSession 中编写了这段代码:

Private WithEvents items As Outlook.items

Public Sub SetItems()
Set items = Application.GetNamespace("MAPI") _
.GetDefaultFolder(olFolderDeletedItems) _
.items
End Sub

Private Sub items_ItemAdd(ByVal Item As Object)

Dim mail As MailItem

On Error Resume Next
Set mail = Item
Err.Clear
On Error GoTo 0

If Not mail Is Nothing Then
MsgBox mail.Subject
mail.UnRead = False
End If

End Sub

然后我跑了 SetItems从直接 Pane 中,转到我的收件箱并删除了一条 SMS 消息 - 正如预期的那样 mailNothing .然后我删除了一封电子邮件,并收到了带有邮件主题的消息。

当我选择两封电子邮件并点击“删除”时,每个选定的电子邮件都会触发一次事件,所以我看到了两个消息框 - 它可以正常工作! :)

Outlook API 似乎没有提供一次处理所有删除的事件。

关于vba - 当多个项目一次添加到 Outlook 文件夹时,如何触发事件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18993476/

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