2013-10-02 78 views
1

我有一个宏,当我退出Outlook 2007时,应该删除'x'天数量的电子邮件,但它似乎只删除了其中的几个,当我打开它并退出再次删除了其余部分。代码如下:For Each loop not delete all items

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 

在这个例子中,我在我的收件箱文件夹下的Auto文件夹中选择了大于7天的旧版本。 任何想法为什么它不会第一次删除它们?

感谢

回答

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 

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

+0

谢谢,看起来很棒! – Safinn