Приостановить / остановить загрузку новых писем при запуске макроса VBA в Outlook [пауза / остановка синхронизации] - PullRequest
0 голосов
/ 06 мая 2020

Я новичок в программировании VBA в Outlook.

Я пишу макрос, который сканирует почтовый ящик и перемещает электронные письма в указанные c папки, проверяя такие критерии, как тема, отправитель, тело и т. Д. c.

Теперь проблема в том, что когда я l oop через почтовый ящик и приходит новое электронное письмо, l oop ломается.

Первое возможное Решение этой проблемы, которое пришло мне в голову, заключалось в отключении синхронизации электронной почты на время работы макроса. Я изучил это дальше и нашел объект Syn c в Outlook VBA с помощью методов Sync.Start и Sync.Stop.

docs Microsoft - метод SyncObject.Start

Итак, я объявил все переменные, как в ссылке, и попробовал код. Кажется, все выполняется без ошибок, I loop through all the sync objects and stop them, однако я заметил, что электронные письма все равно приходят в мой почтовый ящик.

Public Sub Sync() 
 Dim nsp As Outlook.NameSpace 
 Dim sycs As Outlook.SyncObjects 
 Dim syc As Outlook.SyncObject 
 Dim i As Integer 

Set nsp = Application.GetNamespace("MAPI") 
Set sycs = nsp.SyncObjects 

For i = 1 To sycs.Count 
    Set syc = sycs.Item(i) 
    syc.Stop  
Next 
End Sub

Мы очень ценим любые идеи, как сделать эту работу, или другие идеи, как решить эту проблему. Спасибо

[РЕДАКТИРОВАТЬ 1, 07.05.2020, 20:29] Спасибо за комментарии, ребята, у меня в голове возникла еще одна идея. Я мог бы создать временную папку, переместить все электронные письма, удовлетворяющие моим критериям, из папки «Входящие» в эту временную папку, отсортировать эти электронные письма в другие папки из этой временной папки. Это должно работать, потому что во временную папку не будут приходить новые электронные письма, в отличие от папки «Входящие»!

Ответы [ 2 ]

1 голос
/ 06 мая 2020

Во-первых, покажите свой код, который обрабатывает элементы.

Во-вторых, вы можете отсортировать свою коллекцию (Items.Sort) по ReceivedTime и обработать коллекцию Items в обратном порядке (Items.Count to 1 step -1)

0 голосов
/ 06 мая 2020

Вместо того, чтобы перебирать все элементы в папке и не нарушать l oop при поступлении нового элемента, я бы рекомендовал использовать методы Find / FindNext или Restrict, где вы можете найти только предметы, соответствующие вашим условиям. Дополнительные сведения об этих методах см. В следующих статьях:

Кроме того, вы можете обрабатывать элементы небольшими порциями, находя все элементы за неделю или месяц и т.д. c.

...