【问题标题】:For Each loop not deleting all itemsFor Each 循环不删除所有项目
【发布时间】:2013-10-08 20:46:34
【问题描述】:

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

谢谢

【问题讨论】:

    标签: vba outlook outlook-2007


    【解决方案1】:

    通常在删除时您需要不同类型的迭代:

    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
    

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2012-05-30
      • 2016-09-07
      • 2021-10-31
      • 1970-01-01
      相关资源
      最近更新 更多