【问题标题】:oultlook vba loop over inbox, not bulk scanOutlook vba循环收件箱,而不是批量扫描
【发布时间】:2018-11-23 13:48:22
【问题描述】:

我们有一个共享邮箱,并且警报文件夹中充满了警报。数以千计的——大部分来自一天的开始和结束。中午的新警报实际上可能是我们需要查看的内容。

没有人会在早上将该文件夹批量标记为已读,因为它花费的时间太长 - 您无法突出显示谁邮箱并单击“标记为未读”。标记电子邮件的唯一方法是一次突出显示几百封电子邮件——这需要手动操作。

我制作了 thsi 脚本,因为它会自动标记“警报”文件夹中的电子邮件。但是,它似乎同时跟踪整个文件夹。该脚本相当于 highlightimg 整个文件夹,并标记批量删除。这需要很长时间并锁定共享邮箱。我想要一些从文件夹底部开始,循环浏览每封电子邮件,如果未读,则将电子邮件标记为未读。暂停一秒钟,然后下一个。

这可能吗?

Sub Test2()


Dim objInbox As Outlook.MAPIFolder
Dim objOutlook As Object, objnSpace As Object, objMessage As Object
Dim objSubfolder As Outlook.MAPIFolder

Set objOutlook = CreateObject("Outlook.Application")
Set objnSpace = objOutlook.GetNamespace("MAPI")
Set objInbox = objnSpace.GetDefaultFolder(olFolderInbox)
Set objSubfolder = objInbox.Folders.Item("_ALERTS")

For Each objMessage In objSubfolder.Items
objMessage.UnRead = False
Next

Set objOutlook = Nothing
Set objnSpace = Nothing
Set objInbox = Nothing
Set objSubfolder = Nothing


End Sub

【问题讨论】:

    标签: vba outlook


    【解决方案1】:

    您可以在 Outlook 中创建一个代码,当新电子邮件进入目标文件夹时触发该代码。

    Public WithEvents objMails As Outlook.Items
    Private Sub Application_Startup()
    Set objMails = Outlook.Application.Session.GetDefaultFolder(olFolderInbox).Folders("_ALERTS").Items
    End Sub
    Private Sub objMails_ItemAdd(ByVal Item As Object)    
    'Do more stuff
    End Sub
    

    这将避免一次循环浏览所有电子邮件

    【讨论】:

      【解决方案2】:

      您可以使用 Restrict 来限制要处理的项目。

      Option Explicit
      
      Sub Test2()
      
      Dim objInbox As Folder
      Dim objnSpace As namespace
      
      Dim objSubfolder As Folder
      
      dim unreadItems As items
      dim unreaditemsCount as long
      
      Set objnSpace = GetNamespace("MAPI")
      Set objInbox = objnSpace.GetDefaultFolder(olFolderInbox)
      Set objSubfolder = objInbox.Folders.Item("_ALERTS")
      
      set unreadItems = objSubfolder.Items.Restrict("[UnRead] = True")
      
      unreaditemsCount = unreadItems.Count
      
      If unreaditemsCount > 0 Then
      
          ' Reverse loop when changing the number of items in the collection
          For i = unreaditemsCount to 1 
              unreadItems(i).UnRead = False
          Next
      
      end if
      
      Set objInbox = Nothing
      Set objnSpace = Nothing
      
      Set objSubfolder = Nothing
      Set unreadItems = Nothing
      
      End Sub
      

      【讨论】:

        猜你喜欢
        • 2019-01-26
        • 2015-10-04
        • 1970-01-01
        • 2021-11-23
        • 2019-01-17
        • 1970-01-01
        • 2021-08-12
        • 1970-01-01
        相关资源
        最近更新 更多