为什么“撤消”不适用于标记为已读和移动邮件项目的 Outlook 宏?

Ant*_*ean 5 outlook vba

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

  1. 删除一条消息
  2. 归档消息
  3. 撤销

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

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
Run Code Online (Sandbox Code Playgroud)

还是我必须在撤消支持中编码?

Geo*_*off 4

不幸的是,Outlook 的撤消功能仅对用户操作起作用,而不对编程操作起作用。Excel 允许通过Application.OnUndo挂钩执行此操作,但 Outlook 中未实现此操作。

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