oultlook vba loop over inbox, а не массовое сканирование - PullRequest
0 голосов
/ 23 ноября 2018

У нас есть общий почтовый ящик, а папка оповещений заполняется оповещениями.Тысячи из них - большинство с начала дня и до конца дня.Новые оповещения в середине дня могут быть тем, на что нам нужно обратить внимание.

Никто никогда не помечает папку как прочитанную утром, потому что это занимает слишком много времени - вы не можете выделить почтовый ящик who и нажать «пометить как непрочитанное».Единственный способ пометить электронные письма - выделить несколько сотен за раз, что требует времени вручную.

Я сделал этот сценарий, потому что он автоматически помечает электронные письма в папке «Предупреждения». Однако, кажется, что он идет сразу за всей папкой. Сценарий является эквивалентом выделения всей папки,и пометка массового удаления. Это занимает много времени и блокирует общий ящик электронной почты. Я хотел бы что-то, что будет начинаться в нижней части папки, циклически перебирать каждое письмо, и, если оно не прочитано, помечать письмо как непрочитанное. Пауза на секундузатем следующий.

Возможно ли это?

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

Ответы [ 2 ]

0 голосов
/ 23 ноября 2018

Вы можете использовать Ограничить, чтобы ограничить количество обрабатываемых элементов.

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
0 голосов
/ 23 ноября 2018

Вы можете создать код в 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

, что позволит избежать зацикливания всех писем за раз

...