1

我有一个宏,当我退出 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 天。任何想法为什么它不会第一次全部删除它们?

谢谢

4

1 回答 1

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

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

于 2013-10-02T14:37:15.963 回答