首页 > 解决方案 > VB 宏只移动了我已读邮件的一半

问题描述

我在 myOutlook 中有一个宏,它将已读邮件从收件箱移动到名为“已读”的文件夹中。这是代码:

    Private Sub no_Click()
    Unload Me
End Sub

Private Sub yes_Click()
    On Error Resume Next
        Set oOutlook = CreateObject("Outlook.Application")
        Set oNameSpace = oOutlook.GetNamespace("MAPI")
        Set oFolderSrc = oNameSpace.GetDefaultFolder(olFolderInbox)
        Set oFolderDst = oFolderSrc.Folders("Read")
        Set oFilteredItems = oFolderSrc.Items.Restrict("[UnRead] = False")
                For Each oMessage In oFilteredItems
                    oMessage.Move oFolderDst
                Next
End Sub

但是,当我运行宏时,它只复制了我一半的邮件。示例:我的收件箱中有 500 封邮件。当我运行宏时,它会在我的收件箱中留下 250 封邮件。当我再次运行它时,它会留下 125 封邮件,等等。

我在这里做错了什么?

标签: vbaemailoutlook

解决方案


试试这个:

For index = oFilteredItems.Count to 1 Step -1
    oFilteredItems.Item(index).Move oFolderDst
Next

我怀疑被移动的项目搞砸了For Each


推荐阅读