【问题标题】:VBA loop with deleting items删除项目的 VBA 循环
【发布时间】:2022-01-03 13:03:24
【问题描述】:

我有下面的代码来循环访问 Outlook 约会中的受邀参与者并删除所有参与者,但它没有按预期工作。

For Each Item In RestrictedItems
    If Item.Class = olAppointment Then
        For Each Attendee In Item.Recipients
            Attendee.Delete
        Next Attendee
    End If
Next Item

【问题讨论】:

  • 使用倒退的索引循环代替For...Each

标签: vba outlook


【解决方案1】:

报告此问题的规律性单调,因此令人惊讶的是,您的搜索并未引导您找到解决方案。出现您遇到的问题是因为您正在通过删除项目来更改要枚举的项目集。即,当您删除第 2 项时,第 3 项现在变成第 2 项,但 VBA 循环中的计数器不知道这已经发生,因此递增到 3,因此下一个要删除的项是当前第 3 项(这是第 4 项)。这个问题可以通过仅删除超出待处理范围的项目来解决,即,如果您正在倒计时,则删除项目 7 不是问题,因为项目 6 不会改变其位置。因此你需要使用

For myIndex =Item.Recipients.Count to 1 Step -1 ' Because collections start at 1 not 0

    Item.Recipients.Item(myIndex).delete

Next

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2022-01-02
    • 1970-01-01
    • 2018-07-16
    • 2013-04-22
    • 2021-02-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多