自动将已删除邮件中的电子邮件标记为已读 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
我在另一台机器上用 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