为什么“撤消”无法与标记为已读并移动邮件项的Outlook宏一起使用?

时间:2011-07-27 21:23:18

标签: outlook outlook-vba

我有Outlook macro标记为正在阅读并将对话中的所有邮件移动到另一个文件夹中。我将宏分配给一个名为“存档”的按钮。但是,我无法“撤消”这一行动。如果我

  1. 删除邮件
  2. 存档消息
  3. 撤消
  4. 我最终取消删除邮件。我以为我会取消移动信息。如果我通过将消息拖放到另一个文件夹来移动消息,则撤消按照我期望的方式工作。这是宏,有谁知道为什么这不支持撤销?

    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
    

    或者我必须在撤消支持中编码吗?

1 个答案:

答案 0 :(得分:3)

不幸的是,Outlook的撤消功能仅对用户的操作起作用,而不是对程序化操作起作用。 Excel允许通过Application.OnUndo挂钩,但这不在Outlook中实现。

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