自动将已删除邮件中的电子邮件标记为已读 Outlook 2016 VBA

Automatically Mark email in Deleted Items as Read Outlook 2016 VBA

我在另一台机器上用 Outlook 设置了一个小宏,但现在我已经切换了电脑,我无法让它工作。当我尝试 运行 最后一个 Private Sub 时,它无法识别名称并拉出没有列出任何选项的宏选择框。

我不喜欢手动将“已删除邮件”文件夹中的电子邮件标记为已读,尤其是考虑到他们具有惊人的先见之明,可以将丢弃的草稿标记为未读。

这是曾经有效的代码:

Dim WithEvents g_OlkFolder As Outlook.Items

Private Sub Application_Quit()
    Set g_OlkFolder = Nothing
End Sub

Private Sub Application_Startup()
    Set g_OlkFolder = Session.GetDefaultFolder(olFolderDeletedItems).Items
End Sub

Private Sub g_OlkFolder_ItemAdd(ByVal Item As Object)
    Item.UnRead = False
    Item.Save
End Sub

这里有一些要尝试检查的事情:

  • 将光标置于Application_Startup方法中,然后按F5。然后回去再试一次。如果这有帮助,初始化没有运行,并且g_OlkFolder变量没有设置。
  • Item.UnRead = False 行放置一个断点。如果不止于此,则说明您的方法不 运行ning。
  • 您是否将代码放入 ThisOutLookSession 模块?

尝试使用我喜欢的Application.Session property, or use GetNamespace方法

例子

Private WithEvents Items As Outlook.Items
Private Sub Application_Startup()
    Dim olNs As Outlook.NameSpace
    Dim DeletedFolder  As Outlook.MAPIFolder

    Set olNs = Application.GetNamespace("MAPI")
    Set DeletedFolder = olNs.GetDefaultFolder(olFolderDeletedItems)
    Set Items = DeletedFolder.Items
End Sub

Private Sub Items_ItemAdd(ByVal Item As Object)
    If TypeOf Item Is Outlook.MailItem Then
        ' do something with Item
    End If
End Sub

或定义 olFolderDeletedItems 或将其替换为 3。 有关详细信息,请参阅 this link

在完全放弃我的代码并从头开始后,我找到了一个比我尝试的更简单的解决方案。无论如何,谢谢大家的帮助!

Sub MDAU()
Dim DI As Outlook.Items
Dim MSG As Object
Set DI = Session.GetDefaultFolder(olFolderDeletedItems).Items
Set MSG = Application.CreateItem(olMailItem)
For Each MSG In DI
MSG.UnRead = False
Next
End Sub