Vba 对于每个循环,不删除所有项

Vba 对于每个循环,不删除所有项,vba,outlook,outlook-2007,Vba,Outlook,Outlook 2007,我有一个宏,当我退出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"

我有一个宏,当我退出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天”。 你知道为什么它不在第一时间删除它们吗


谢谢

一般来说,删除时需要不同类型的迭代:

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
这是因为,当您从集合中删除元素时,集合将被重新索引。因此,您需要在集合中后退一步,否则您将“跳过”某些项目