VBA Outlook: быстро найти подпапку


0

У меня есть следующая структура в моих общих папках 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

Не могли бы вы предоставить свой код? Трудно сказать, будет ли другой макрос работать лучше, чем ваш, когда вы не знаете, насколько он хорош. ;) 17 июн. 162016-06-17 08:06:01

  0

Код добавлен, его очень грубо и необходимо очистить (например, не работать с индексами папок, который немного хрупкий, но главной проблемой, конечно, является цикл через все подпапки) 17 июн. 162016-06-17 08:42:05

1

Перебор Folder.Folders коллекции является единственным способом найти любую заданную папку по имени. Единственная альтернатива - поддерживать индекс имен папок и сопоставлений Folder.EntryID, чтобы вы могли использовать NameSpace.GetFolderFromID.