Outlook VBA - BeforeDelete不工作

时间:2016-12-08 18:50:24

标签: vba outlook outlook-vba

使用Outlook 2016 for Windows(10)。

我正在尝试编写一些VBA来自动将我删除的电子邮件复制到一个单独的文件夹中(或者可能覆盖"删除"仅使用副本)。

在我做到这一点之前,先要求的是设置一个简单的VBA脚本来捕获删除事件。

我查看了MSDN并找到了以下代码,我将其插入" ThisOutlookSession"对象

Public WithEvents myItem As Outlook.MailItem

Public Sub DeleteMail()
 Const strCancelEvent = "Application-defined or object-defined error"
  On Error GoTo ErrHandler
  Set myItem = Application.ActiveInspector.CurrentItem
  myItem.Delete
  Exit Sub

 ErrHandler:
  MsgBox Err.Description
  If Err.Description = strCancelEvent Then
  MsgBox "The event was cancelled."
  End If
  'If you want to execute the next instruction
  Resume Next
  'Otherwise it will finish here
 End Sub

 Private Sub myItem_BeforeDelete(ByVal Item As Object, Cancel As Boolean)
  'Prompts the user before deleting an item
  Dim strPrompt As String
  'Prompt the user for a response
  strPrompt = "Are you sure you want to delete the item?"
  If MsgBox(strPrompt, vbYesNo + vbQuestion) = vbNo Then
  'Don't delete the item
  Cancel = True
  End If
 End Sub

但是,这不会运行。当我去删除项目时(通过点击收件箱中的" del"键或打开项目并单击"删除"功能区上),该项目将移至已删除项目文件夹,但我没有看到一个消息框。这似乎相对简单,我不确定我错过了什么。

1 个答案:

答案 0 :(得分:2)

看起来BeforeDelete事件的用途有限,正如使用DeleteMail代码实现的那样。

根据这个https://msdn.microsoft.com/en-us/library/office/ff861266.aspx“应该在Outlook调用事件过程之前调用DeleteMail()过程。”

所以你的行动“...通过点击收件箱中的”del“键或打开项目并点击功能区上的”删除“”无效。

您可以调查NewInspector事件,以便在打开项目时为myItem设置mySetem,并为资源管理器设置SelectionChange事件。

你应该能够用ItemAdd做你想做的事 已删除文件夹中的https://msdn.microsoft.com/en-us/library/office/ff869609.aspx