For循环不会循环浏览Outlook电子邮件文件夹中的所有项目

时间:2019-02-26 12:37:12

标签: excel vba outlook

我在excel中编写了许多宏,这些宏可以打开收件箱中的电子邮件,保存附件,然后对附件进行一些处理。现在,我想通过将所有电子邮件从特定发件人移动到指定文件夹并将其标记为已读来整理所有内容。

我写了以下VBA(对此书进行了阅读和修改)。问题在于它不会遍历收件箱中的所有项目。

Const olFolderInbox As Integer = 6

Sub MoveMail()

Dim oOlAp As Object, oOlns As Object, oOlInb As Object
Dim oOlItm As Object, oOlAtch As Object, SubFolder As Object
Dim eSender  As String
Dim i As Integer
i = 1

Set oOlAp = GetObject(, "Outlook.application")
Set oOlns = oOlAp.GetNamespace("MAPI")
Set oOlInb = oOlns.GetDefaultFolder(olFolderInbox)

Set SubFolder = oOlInb.Folders("FolderLevel2Name").Folders("FolderLevel3Name").Folders("FolderLevel4Name")

Debug.Print oOlInb.Items.Count

For Each oOlItm In oOlInb.Items
    eSender = oOlItm.SenderEmailAddress
    Debug.Print i & " --> " & eSender

    If eSender Like "name@domain.co.uk" Then
        'Debug.Print eSender
        oOlItm.UnRead = False
        DoEvents
        oOlItm.Save
        oOlItm.Move SubFolder
    End If

    i = i + 1

Next

End Sub

运行此文件时,name @ domain.co.uk中的某些项目将移至正确的文件夹,但不是全部。但是,根本无需更改任何内容,只需再次运行它即可移动更多电子邮件。最终,如果我运行宏足够的次数,它最终将全部移动,而无需更改任何内容。

例如,我尝试用name@domain.co.uk的15封电子邮件和其他发件人的4封电子邮件运行它。处理完收件箱中的11个项目后,for循环停止了,其中9个来自指定发件人,并且已被移动,另外两个正确地留在了收件箱中。

然后我再次运行了剩余的10封电子邮件,其中6封来自指定发件人。这次它遍历了6个,其中4个来自指定的发件人并被移动了。最终,在第三次尝试时,它最终遍历了收件箱中其余的6个项目,将剩下的2个从指定发件人处移出。怎么了?

0 个答案:

没有答案