我有一个宏,它应该在我退出Outlook 2007时删除超过'x'天数的电子邮件,但它似乎只删除其中一些,当我打开它并再次退出时删除了其余的。这是代码:
Private Sub Application_Quit()
Dim myOlApp, myNameSpace As Object
Dim MyItem As Object
Dim DeletedFolder As Object
Set myOlApp = CreateObject("Outlook.Application")
Set myNameSpace = myOlApp.GetNamespace("MAPI")
'Set DeletedFolder = myNameSpace.GetDefaultFolder(olFolderDeletedItems)
Set DeletedFolder = myNameSpace.GetDefaultFolder(olFolderInbox).Folders("Auto")
For Each MyItem In DeletedFolder.Items
If DateDiff("d", MyItem.ReceivedTime, Now) > 7 Then
MyItem.Delete
End If
Next
End Sub
在此示例中,我在“收件箱”文件夹下的“自动”文件夹中选择了超过7天的时间。 任何想法为什么它不会第一次删除它们?
由于
答案 0 :(得分:2)
通常在删除时需要不同类型的迭代:
Dim m as Long
For m = DeletedFolder.Items.Count to 1 Step -1
Set myItem = DeletedFolder.Items(m)
If DateDiff("d", MyItem.ReceivedTime, Now) > 7 Then
MyItem.Delete
End If
Next
这是因为,当您从集合中删除元素时,会重新索引该集合。所以你需要向后退一步,否则你会“跳过”一些项目。