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

时间:2013-10-02 12:55:32

标签: outlook-2007 outlook-vba

我有一个宏,它应该在我退出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天的时间。 任何想法为什么它不会第一次删除它们?

由于

1 个答案:

答案 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

这是因为,当您从集合中删除元素时,会重新索引该集合。所以你需要向后退一步,否则你会“跳过”一些项目。