Outlook VBA - массовое перемещение электронной почты между подпапками


1

Мне обычно приходится перемещать приличное количество электронной почты (150+) из подпапки в другую. В почтовом ящике есть много папок, в которые я выполняю эту задачу. Кажется, что это был бы простой макрос для записи, но то, что у меня есть, существенно медленнее, чем Ctrl + A, перетащить в папку назначения.

Я рассмотрел предыдущие вопросы о переносе писем Outlook и документации Microsoft, но я не могу понять, как быстро и надежно переместить электронные письма. Я был бы признателен за любую информацию о том, где я ошибаюсь, и если есть еще одно решение помимо VBA.

Текущий код ниже. Моя конечная цель состояла бы в том, чтобы перебирать список имен папок (вместо того, чтобы выбирать папку).

Заранее спасибо.

Sub MoveEmailsToDone() 

On Error Resume Next 

Dim ns As Outlook.NameSpace 
Dim AnalystFolder As Outlook.MAPIFolder 
Dim MoveToFolder As Outlook.MAPIFolder 

Set ns = Application.GetNamespace("MAPI") 

Set AnalystFolder = Application.ActiveExplorer.CurrentFolder 
Set MoveToFolder = ns.Folders("[email protected]").Folders(AnalystFolder.Name & "-DONE") 

For i = AnalystFolder.Items.Count To 1 Step -1 
    AnalystFolder.Items(i).Move MoveToFolder 
Next i 

Set ns = Nothing 
Set AnalystFolder = Nothing 
Set MoveToFolder = Nothing 

End Sub 
0

Из опыта Move and Delete медленно.

http://computer-programming-forum.com/1-vba/17216b85e9c096d3.htm

07 июль
2 003 Следующий код перебирает каждый почтовый элемент в указанной папке и перемещает элемент в другую папку. Для 1100 предметов требуется больше , чем за 5 мин. Он не двигается так медленно, когда я выбираю все и перемещаю в пользовательский интерфейс.

.

Перспектива использует Extended MAPI для выполнения операции перемещения, а именно
IMAPIFolder :: CopyMessages(), которая принимает список entryids, следовательно, он не
нужно открывать каждое сообщение. Поставщик магазина завершает всю операцию на сервере
без отправки большого количества данных взад и вперед, как это, по-видимому, происходит, когда
вы запускаете свой код.

Дмитрий Streblechenko

https://stackoverflow.com/users/332059/dmitry-streblechenko

DoEvents позволяет использовать Outlook, в то время как код работает.

For i = AnalystFolder.Items.Count To 1 Step -1 

    DoEvents  
    AnalystFolder.Items(i).Move MoveToFolder  

Next i 

MsgBox "MoveEmailsToDone is finally done."