首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在某些邮件项上标记为不一致的读取循环错误

在某些邮件项上标记为不一致的读取循环错误
EN

Stack Overflow用户
提问于 2016-06-21 21:45:47
回答 1查看 149关注 0票数 1

我在一个周末和整个星期都会收到4000+电子邮件,这些邮件都是通过规则过滤到文件夹中的。我创建了一个宏来将所有这些文件夹标记为已读。但是,在某些邮件项目上,它会使用runtime error 91 object variable or with block variable not set出错。

如果我使用On Error Resume Next跳过错误,它会循环遍历所有内容,但不会将大量邮件项设置为已读。然后,我可以重新返回宏,以获得其余的大部分。如果我运行宏3-4次,它最终会得到它们。

如何改进此宏以一致地将所有项目标记为已读?

代码语言:javascript
复制
Public Function GetInboxFolderID(FolderName As String) As String
    Dim nsp As Outlook.Folder
    Dim mpfSubFolder As Outlook.Folder
    Dim mpfSubFolder2 As Outlook.Folder
    Dim flds As Outlook.Folders
    Dim flds2 As Outlook.Folders

    Set nsp = Application.GetNamespace("MAPI").GetDefaultFolder(olFolderInbox)
    Set flds = nsp.Folders
    Set mpfSubFolder = flds.GetFirst
    Do While Not mpfSubFolder Is Nothing
        If mpfSubFolder.Name = FolderName Then
            GetInboxFolderID = mpfSubFolder.EntryID
            Exit Function
        End If
        Set flds2 = mpfSubFolder.Folders
        Set mpfSubFolder2 = flds2.GetFirst
        Do While Not mpfSubFolder2 Is Nothing
            If mpfSubFolder2.Name = FolderName Then
                GetInboxFolderID = mpfSubFolder2.EntryID
                Exit Function
            End If
            Set mpfSubFolder2 = flds2.GetNext
        Loop
        Set mpfSubFolder = flds.GetNext
    Loop
End Function

Private Sub processFolder(ByVal oParent As Outlook.MAPIFolder)

        Dim oFolder As Outlook.MAPIFolder
        Dim oMail As Outlook.MailItem
        Dim oFiltered As Outlook.Items

        Set oFiltered = oParent.Items.Restrict("[unread] = true")
        On Error Resume Next
        For Each oMail In oFiltered

            oMail.UnRead = False

        Next

        If (oParent.Folders.Count > 0) Then
            For Each oFolder In oParent.Folders
                processFolder oFolder
            Next
        End If
End Sub

Public Sub markNocAsRead()
    Dim SubFolder As MAPIFolder
    Set SubFolder = Session.GetDefaultFolder(olFolderCalendar).Parent.Folders("NOC Alerts")
    'Application.Session.GetFolderFromID (GetInboxFolderID("NOC Alerts"))
    Call processFolder(SubFolder)
End Sub
EN

回答 1

Stack Overflow用户

发布于 2016-06-21 22:17:11

通过采纳Ryan Wildry在上面的一条评论中的建议,我能够让它持续工作。

我替换了我的循环:

代码语言:javascript
复制
Set oFiltered = oParent.Items.Restrict("[unread] = true")
On Error Resume Next
For Each oMail In oFiltered
    oMail.UnRead = False
Next

使用一个循环从头到尾迭代:

代码语言:javascript
复制
Set oFiltered = oParent.Items.Restrict("[unread] = true")
For I = oFiltered.Count To 1 Step -1
    Set oMail = oFiltered(I)
    oMail.UnRead = False
Next
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/37946235

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档