使用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"键或打开项目并单击"删除"功能区上),该项目将移至已删除项目文件夹,但我没有看到一个消息框。这似乎相对简单,我不确定我错过了什么。
答案 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。