Конечно, перебирать все элементы в папке - не самая лучшая и правильная идея. Вам нужно использовать методы Restrict
или Find
/ FindNext
класса Items, чтобы получить только те предметы, которые соответствуют вашим условиям. Дополнительные сведения об этих методах см. В следующих статьях:
В приведенном выше коде я заметил следующую строку:
Set olMail = olInb.Items.Restrict("[Subject] = ""*Blue Recruit Req Data*""")
Имейте в виду, что методы Restrict
возвращают экземпляр класса Items
, который содержит набор элементов, соответствующих вашему состоянию, а не один элемент, как вы могли подумать. Например:
Sub MoveItems()
Dim myNamespace As Outlook.NameSpace
Dim myFolder As Outlook.Folder
Dim myItems As Outlook.Items
Dim myRestrictItems As Outlook.Items
Dim myItem As Outlook.MailItem
Set myNamespace = Application.GetNamespace("MAPI")
Set myFolder = _
myNamespace.GetDefaultFolder(olFolderInbox)
Set myItems = myFolder.Items
Set myRestrictItems = myItems.Restrict("[Subject] = ""*Blue Recruit Req Data*""")
For i = myRestrictItems.Count To 1 Step -1
myRestrictItems(i).Move myFolder.Folders("Business")
Next
End Sub
Кроме того, я бы изменил строку фильтра, включив в нее записи, которые могут содержать переданную подстроку:
filter = "@SQL=" & Chr(34) & "urn:schemas:httpmail:subject" & Chr(34) & " LIKE '%" & wordsInSubject & " %'"
Чтобы получить упорядоченные элементы, т.е. начать с недавнего или самые старые, вам необходимо отсортировать коллекцию с помощью методов Sort
класса Items
:
Items.Sort("[ReceivedTime]")
Наконец, вы также можете найти метод AdvancedSearch
класса Application. Ключевые преимущества использования метода AdvancedSearch
в Outlook:
- Поиск выполняется в другом потоке. Вам не нужно запускать другой поток вручную, поскольку метод
AdvancedSearch
запускает его автоматически в фоновом режиме. - Возможность поиска любых типов элементов: почта, встреча, календарь, заметки и c. в любом месте, т.е. за пределами определенной папки. Методы
Restrict
и Find
/ FindNext
могут применяться к конкретной коллекции Items
(см. Свойство Items
класса Folder
в Outlook). - Полная поддержка DASL запросы (для поиска также можно использовать настраиваемые свойства). Подробнее об этом можно прочитать в статье Фильтрация в MSDN. Для повышения производительности поиска можно использовать ключевые слова
Instant Search
, если Instant Search
включен для магазина (см. Свойство IsInstantSearchEnabled
класса Store
). - Вы можете остановить процесс поиска на в любой момент, используя метод
Stop
класса Search
.
Узнайте больше о методе AdvancedSearch
и найдите программный код в расширенном поиске в Outlook: C#, VB. NET артикул.