2013-10-02 79 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