我的Outlook公共文件夹中有以下结构。
-Public Folders
--1001_RandomProject
--1002_AnotherProject
--1003_Yetanotherproject
...
等等,基本上有几千个(!)子文件夹,每个子文件夹对应一个项目,并以项目编号为前缀。
现在我正在尝试创建一个允许用户选择多个邮件项目的宏,通过输入框输入项目编号,然后将这些邮件项目自动移动到与项目编号对应的子文件夹中。
所有这一切都有效,但在当前的实现中,我循环遍历公共文件夹的所有子文件夹,并将输入的项目编号与文件夹名称的前4个字符进行比较,以查看它们是否匹配,然后移动邮件到文件夹。
正如您可以想象的,有数千个子文件夹,这往往会非常缓慢。所以我的问题是:是否有另一种方法来选择正确的文件夹而不循环遍历所有这些(使用像'找到我以1001 *开头的文件夹'这样的掩码。)
“查找文件夹”代码的简化部分
Sub verplaatsen()
Dim Boodschap, Titel, Standaard
Dim ProjectNumber As String
Dim NrOfFolders as Integer
Dim objOutlook As Outlook.Application
Dim objNamespace As Outlook.NameSpace
Dim FolderName as String
Boodschap = "Enter project number"
Titel = "Move mail"
Standaard = "0000"
ProjectNumber = InputBox(Boodschap, Titel, Standaard)
Set objOutlook = Application
Set objNamespace = objOutlook.GetNamespace("MAPI")
NrOfFolders = objNamespace.Folders(3).Folders(12).Folders.Count
I = 2
Do
FolderName = objNamespace.Folders(3).Folders(12).Folders(I).Name
If Left(FolderName, 4) = ProjectNumber Then
Else
I = I + 1
End If
Loop Until I = NrOfFolders Or Left(FolderName, 4) = ProjectNumber
MoveMail (I)
End Sub
答案 0 :(得分:1)
通过Folder.Folders集合循环是按名称查找任何给定文件夹的唯一方法。唯一的选择是维护文件夹名称和Folder.EntryID映射的索引,以便您可以使用NameSpace.GetFolderFromID。