【问题标题】:VBA Outlook Array Index out of boundsVBA Outlook 数组索引超出范围
【发布时间】:2016-04-26 10:37:41
【问题描述】:

我有以下代码可以自动删除超过两个月的电子邮件:

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,因此数组中有元素。

如果数组中有对象,为什么还会出现这个错误?

【问题讨论】:

标签: arrays vba outlook indexoutofboundsexception


【解决方案1】:

删除项目的行为会减少Items.Count,如果i,则使其与当前值不同步。

向后循环,使i 始终是最后一项(保证存在):

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多