Vba “为什么?”;撤销;不使用标记为已读并移动邮件项目的Outlook宏?

Vba “为什么?”;撤销;不使用标记为已读并移动邮件项目的Outlook宏?,vba,outlook,Vba,Outlook,我有一个标记为已读并将对话中的所有邮件移动到另一个文件夹的文件夹。我将宏分配给一个名为“存档”的按钮。然而,我无法“撤销”这一行动。如果我 删除消息 归档邮件 撤消 我最终取消了删除邮件的操作。我想我会把这条信息移开。如果我通过拖放将邮件移动到另一个文件夹中,则“撤消”将按我预期的方式工作。这是宏,有人知道为什么它不支持撤销吗 Sub ArchiveConversation() Set ArchiveFolder = Application.GetNamespace("MAPI").Ge

我有一个标记为已读并将对话中的所有邮件移动到另一个文件夹的文件夹。我将宏分配给一个名为“存档”的按钮。然而,我无法“撤销”这一行动。如果我

  • 删除消息
  • 归档邮件
  • 撤消
  • 我最终取消了删除邮件的操作。我想我会把这条信息移开。如果我通过拖放将邮件移动到另一个文件夹中,则“撤消”将按我预期的方式工作。这是宏,有人知道为什么它不支持撤销吗

    Sub ArchiveConversation()
        Set ArchiveFolder = Application.GetNamespace("MAPI").GetDefaultFolder(olFolderInbox).Parent.Folders("Archive")
        Set Conversations = ActiveExplorer.Selection.GetSelection(Outlook.OlSelectionContents.olConversationHeaders)
        For Each Header In Conversations
            Set Items = Header.GetItems()
            For i = 1 To Items.Count
                Items(i).UnRead = False
                Items(i).Move ArchiveFolder
            Next i
        Next Header
    End Sub
    

    还是必须在“撤消支持”中编写代码?

    不幸的是,Outlook的撤消功能只对用户的操作起作用,而不对编程操作起作用。Excel允许通过钩子实现这一点,但Outlook中未实现这一点

    也许一个合理的选择是创建一个“撤消上次存档”按钮;只要您将最后一个存档操作存储在您可以访问的位置,当用户单击“撤消”按钮时,您的宏就会手动将消息移回并将其标记为未读(如果最初是这样)