VBA展望数组索引越界

问题描述:

的,我有以下的代码来自动删除旧的两个多月电子邮件:VBA展望数组索引越界

Sub RemoveAutomaticItemsInDeletedItems() 

    If MsgBox("Delete items from from Deleted Items folder ?", vbYesNo, "Confirm") = vbYes Then 

     Dim oDeletedItems As Outlook.Folder 
     Dim obj As Outlook.MailItem 
     Dim i As Integer 

     'Obtain a reference to deleted items folder 
     Set oDeletedItems = Application.Session.GetDefaultFolder(olFolderDeletedItems) 
     For i = 1 To oDeletedItems.Items.Count - 1 
     If oDeletedItems.Items(i).Class = olMail Then 
      Set obj = oDeletedItems.Items.Item(i) 
      If obj.ReceivedTime <= DateAdd("m", -2, Now) Then 

      'Deleting them 
      Debug.Print obj.SenderEmailAddress 
      'Debug.Print obj.Subject 

       obj.Delete 

      End If 
     End If 
     Next 
     MsgBox "Items have been deleted" 
    End If 

End Sub 

但是,错误:

Array index out of bounds

不断叫上线:

If oDeletedItems.Items(i).Class = olMail Then

使用Debug.Print我已经看过上面的代码行:oDeletedItems.Items.Count - 1,计数是1889,因此数组中有元素。

如果数组中有对象,为什么这个错误会持续存在?

+0

的可能的复制[For Each循环:通过Outlook邮箱中循环,从而删除项目时,某些项目获得跳过]( http://*.com/questions/10725068/for-each-loop-some-items-get-skipped-when-looping-through-outlook-mailbox-to-de) – niton

删除一个项目的行为递减Items.Count,并使其与当前值不同步,如果i

循环向后,使i总是最后一个项目(这是保证存在):

For i = oDeletedItems.Items.Count - 1 To 1 Step -1