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

时间:2019-02-25 18:23:20

标签: vba outlook outlook-vba outlook-2016

我在另一台计算机上使用Outlook设置了一个宏,但是现在切换了计算机后,我无法使用它。当我尝试运行最后一个“私人子”时,它无法识别名称,并弹出“宏”选择框,其中未列出任何选项。

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

这是曾经起作用的代码:

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

4 个答案:

答案 0 :(得分:0)

以下是要尝试检查的几件事:

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

答案 1 :(得分:0)

尝试使用Application.Session property,或使用我更喜欢的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

答案 2 :(得分:0)

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

答案 3 :(得分:0)

在完全丢弃我的代码并从头开始时,我想出了一个比我尝试的要简单得多的解决方案。谢谢大家的帮助!

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