Прежде всего, я бы предложил использовать функцию Instr
вместо сравнения строк. Строка Categories может содержать другие маркеры, а не только один.
Не ясно, какой код используется для поиска элементов с заданными категориями c, скорее всего, вы просто перебираете все элементы в папке что не хорошо. Вместо этого вам нужно использовать Find
/ FindNext
или 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("[Categories] = 'testword'")
' do whatever you need with items found, for example, move to a subfolder
For i = myRestrictItems.Count To 1 Step -1
myRestrictItems(i).Move myFolder.Folders("Business")
Next
End Sub
Поле Categories
имеет ключевые слова типа, предназначенные для хранения нескольких значений. При программном доступе к нему поле Categories
ведет себя как поле Text
, и строка должна точно соответствовать. Значения в текстовой строке разделяются запятой и пробелом. Обычно это означает, что вы не можете использовать методы Find
и Restrict
в поле ключевых слов, если оно содержит более одного значения. Например, если у вас есть один контакт в категории «Бизнес» и один контакт в категориях «Бизнес» и «Социальная сеть», вы не можете легко использовать методы Find
и Restrict
для извлечения всех элементов, которые находятся в категории «Бизнес». Вместо этого вы можете l oop через все контакты в папке и использовать функцию Instr
, чтобы проверить, содержится ли строка "Business" во всем поле ключевых слов.
Возможное исключение - если вы ограничите поле Categories
до двух или небольшое количество значений. Затем вы можете использовать методы Find
и Restrict
с логическим оператором ИЛИ для извлечения всех элементов. Например (в псевдокоде): «Бизнес» ИЛИ «Бизнес, Личный» ИЛИ «Личный, Бизнес».
Обратите внимание на то, что строки Category
не чувствительны к регистру.
Подробнее об этих методах читайте в следующих статьях:
Также вам может пригодиться метод AdvancedSearch . Основные преимущества использования метода AdvancedSearch
в Outlook:
- Поиск выполняется в другом потоке. Вам не нужно запускать другой поток вручную, поскольку метод
AdvancedSearch
запускает его автоматически в фоновом режиме. - Возможность поиска любых типов элементов: почта, встреча, календарь, заметки и т. Д. c. в любом месте, то есть за пределами определенной папки. Методы
Restrict
и Find
/ FindNext
могут быть применены к определенной коллекции Items
(см. Свойство Items класса Folder
в Outlook). - Полная поддержка запросов DASL ( Пользовательские свойства могут быть использованы для поиска тоже). Подробнее об этом можно прочитать в статье Filtering в MSDN. Для повышения эффективности поиска можно использовать ключевые слова мгновенного поиска, если для магазина включен мгновенный поиск (см. Свойство
IsInstantSearchEnabled
класса Store
). - Вы можете остановить процесс поиска в любой момент. используя метод
Stop
класса Search
.