我试图创建一个VBA宏来检查是否有重复邮件(看主题),然后删除邮件。删除重复的邮件Outlook 2013
此代码正常工作,但正在删除最早的重复项。它按降序计数,我似乎无法使项目的排序工作。
基本上我需要帮助搞清楚如何确保按接收时间重复的“最新”重复删除。
Sub RemoveDuplicates()
Dim oFolder As Folder
Dim oEmail As MailItem, oItems As ItemProperties, oItem As ItemProperty
Dim cMail As Collection
Dim i As Long
Set oFolder = Application.ActiveExplorer.CurrentFolder
Set cMail = New Collection
With oFolder
' .Items.Sort "[ReceivedTime]", True
If olMailItem <> .DefaultItemType Then Exit Sub
For i = .Items.Count To 1 Step -1
Set oItems = .Items(i).ItemProperties
Debug.Print oItems("ReceivedTime")
If Not oItems("ReceivedTime") Is Nothing Then
Set oItem = oItems("ReceivedTime")
'// Week old
If oItem >= Date - 7 Then
On Error GoTo ErrHandler
'// Delete Duplicate Subject
cMail.Add oItems("Subject"), oItems("Subject")
On Error GoTo 0
End If
End If
Next i
End With
Exit Sub
ErrHandler:
Debug.Print Err.Number, oItems("Subject"), oItems("ReceivedTime")
oFolder.Items(i).Delete
Resume Next
End Sub
感谢工作就像一个魅力! Scripting.Dictionary对于其他一些宏将很方便:) – user3665785
当他发布他的答案时,我已经准备好了,我不想扔掉它。注意'TypeOf'检查和从'Items(i)'(它是'Object')转换为'MailItem'的显式类型,这使得IntelliSense可以用于VBA IDE中的'EMail'变量。你也可以做'Objects(i).Subject',但是你不会自动完成。 – Tomalak
当使用它作为邮件Sub RemoveDuplicates(电子邮件为Outlook.MailItem)时,它不包括触发脚本的收到的电子邮件。假设我必须创建一个单独的事件处理程序 – user3665785