使用VBA访问Outlook中的文件夹

时间:2012-09-27 14:49:08

标签: vba outlook livelink

我正在使用以下内容将邮件移至Outlook中的文件夹。

Dim chemin() as String

chemin = Split(path, "/")
Set myNameSpace = Application.GetNamespace("MAPI")
Set myFolder = myNameSpace.Folders("LiveLink").Folders("Livelink HQE").Folders("Entreprise").Folders(chemin(1)).Folders(chemin(2)).Folders(chemin(3))

myEntryID = myFolder.EntryID
myEntryID = myFolder.StoreID

objMail.Move myNameSpace.GetFolderFromID(myEntryID, storeID)    

一切都在起作用。如您所见,该文件夹位于Livelink中。 Livelink服务器的响应速度实际上很慢,我对此无能为力。

我关心的是使用.Folders()这么多次,而.Folders("Livelink/root/folder1/folder2/")之类的东西会更快。但是这显然不起作用,并且因为.Folders命令需要每次ping Livelink服务器,实际上只需要10秒就可以执行这行代码(文件夹越深,到达的时间就越长)它)。

有没有其他方法可以直接访问Outlook中的特定文件夹来移动邮件?我知道每个文件夹(甚至是Livelink中的文件夹)都有某种Outlook ID,但我看不到任何方法可以使用它。我尝试过以下内容,但它还没有工作:

Dim folder As MAPIFolder
Dim myNameSpace As Outlook.NameSpace
Set myNameSpace = Application.GetNamespace("MAPI")
Set folder = myNameSpace.GetFolderFromID(target, Application.GetNamespace("MAPI").Folders("LiveLink").storeID)

在执行GetFolderfromID()时,这会给我一个错误。 var target实际上是我要将邮件复制到的文件夹的EntryID。

1 个答案:

答案 0 :(得分:3)

根据官方文档,没有比你正在做的更好的方法,除非你需要多次找到该文件夹​​。

MSDN建议的选项是obtain the folder object from the folder path,但这基本上与您正在做的事情相同。

问题是,Folder Object仅表示“代表文件夹树中一个级别的特定子集中的所有可用Outlook文件夹。”(重点已添加)

可能的解决方法是使用NameSpace.GetFolderFromID,但为此你需要知道EntryID,可能还需要知道StoreID,这通常意味着你必须找到文件夹首先无论如何。但您可以保存EntryIDStoreID,以便日后立即召回。

如果您想深入研究EntryIdStoreID,请参阅Working with EntryIDs and StoreIDs上的开发人员参考资料。