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

根据经验移动和删除速度很慢。

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

2003年7月7日
下面的代码循环遍历一个指定的文件夹 每个邮件项目,将项目移动到另一个文件夹。对于1100件物品,需要5分钟以上的更多 。当我选择全部并移动到 用户界面时,它不会移动得那么慢。

Outlook使用扩展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."