Поделиться через


Метод Items.Find (Outlook)

Находит и возвращает объект элемента Microsoft Outlook, удовлетворяющий заданному фильтру.

Синтаксис

expression. Поиск (фильтр)

Выражение Выражение, возвращающее объект Items .

Параметры

Имя Обязательный или необязательный Тип данных Описание
Фильтр Обязательный String Строка, указывающая условия, которым должен соответствовать возвращаемый объект.

Возвращаемое значение

Значение Object , представляющее элемент Outlook, если вызов выполнен успешно; В случае сбоя возвращает значение NULL (или Nothing в Visual Basic).

Замечания

Чтобы использовать поиск по индексации содержимого в коллекции Items , используйте метод Restrict . Функция FindRow вернет ошибку, если фильтр содержит ключевые слова индексирования содержимого. Дополнительные сведения о ключевых словах индексирования контента см. в разделе Фильтрация элементов с помощью ключевых слов запроса.

Метод вернет ошибку со следующими свойствами в фильтре :

Основной текст LastFirstNoSpaceCompany
Children LastFirstSpaceOnlyCompany
Class LastFirstNoSpaceAndSuffix
Companies MemberCount
CompanyLastFirstNoSpace NetMeetingAlias
CompanyLastFirstSpaceOnly NetMeetingAutoStart
ContactNames NetMeetingOrganizerAlias
Контакты NetMeetingServer
ConversationIndex NetMeetingType
DLName RecurrenceState
Email1EntryID ReplyRecipients
Email2EntryID ReceivedByEntryID
Email3EntryID ReceivedOnBehalfOfEntryID
EntryID ResponseState
HTMLBody Saved
IsOnlineMeeting Sent
LastFirstAndSuffix Submitted
LastFirstNoSpace VotingOptions
AutoResolvedWinner DownloadState
BodyFormat IsConflict
InternetCodePage MeetingWorkspaceURL
Разрешение

Создание фильтров для методов поиска и ограничения

Синтаксис фильтра зависит от типа поля, по которого выполняется фильтрация.

Строка (для текстовых полей)

При фильтрации текстовых полей можно использовать пару одинарных кавычек (') или пару двойных кавычек (") для разделения значений, входящих в фильтр. Например, все следующие строки работают правильно, если поле имеет тип String :

sFilter = "[CompanyName] = 'Microsoft'"  
sFilter = "[CompanyName] = ""Microsoft"""  
sFilter = "[CompanyName] = " & Chr(34) & "Microsoft" & Chr(34)

Если при указании фильтра в запросе Jet или DASL используется пара одинарных кавычек для разделения строки, которая является частью фильтра, а строка содержит еще одну кавычку или апостроф, добавьте одну кавычку в качестве escape-символа перед одной кавычками или апострофом. Используйте аналогичный подход, если для разделения строки используется пара двойных кавычек. Если строка содержит двойную кавычку, добавьте двойную кавычку в качестве escape-символа перед двойной кавычками.

Например, в строке фильтра DASL, которая фильтрует свойство Subject , равное слову can't, вся строка фильтра разделяется парой двойных кавычек, а внедренная строка can't разделяется парой одинарных кавычек. В этой строке фильтра необходимо экранировать три символа: начальная двойная кавычка и конечная двойная кавычка для ссылки на http://schemas.microsoft.com/mapi/proptag/0x0037001fсвойство , а также апостроф в условии значения для слова can't. Применив соответствующие escape-символы, можно выразить строку фильтра следующим образом:

filter = "@SQL=""http://schemas.microsoft.com/mapi/proptag/0x0037001f"" = 'can''t'"

Кроме того, функцию chr(34) можно использовать для представления двойной кавычки (значение символа ASCII — 34), используемого в качестве escape-символа. chr(34) Используя подстановку для escape-символа с двойными кавычками, можно выразить последний пример следующим образом:

filter = "@SQL= " & Chr(34) & "http://schemas.microsoft.com/mapi/proptag/0x0037001f" _& Chr(34) & " = " & "'can''t'"

Экранирование символов одиночных и двойных кавычек также требуется для запросов DASL с операторами ci_startswith или ci_phrasematch . Например, следующий запрос выполняет запрос can't на совпадение фраз в теме сообщения:

filter = "@SQL=" & Chr(34) & "http://schemas.microsoft.com/mapi/proptag/0x0037001E" _& Chr(34) & " ci_phrasematch " & "'can''t'"

Другим примером является строка фильтра DASL, которая фильтрует свойство Subject , равное словам the right stuff, где слово stuff заключено в двойные кавычки. В этом случае необходимо экранировать вложенные двойные кавычки следующим образом:

filter = "@SQL=""http://schemas.microsoft.com/mapi/proptag/0x0037001f"" = 'the right ""stuff""'"

Другой набор правил экранирования применяется к ссылке на свойство для именованных свойств, содержащих пробел, одну кавычку, двойную кавычку или символ процента. Дополнительные сведения см. в разделе Ссылки на свойства по пространству имен.

Date

Хотя даты и время обычно хранятся в формате даты , методы Find и Restrict требуют преобразования даты и времени в строковое представление. Чтобы убедиться, что дата отформатирована так, как ожидаетСя в Outlook, используйте функцию Формат . В следующем примере создается фильтр для поиска всех контактов, которые были изменены после 15 января 1999 г. в 3:30 вечера.

sFilter = "[LastModificationTime] > '" & Format("1/15/99 3:30pm", "ddddd h:nn AMPM") & "'"

Логические операторы

Логические операторы , TRUE/ FALSE, ДА/НЕТ, ON/OFF и т. д., не следует преобразовывать в строку. Например, чтобы определить, включено ли ведение журнала для контактов, можно использовать следующий фильтр:

sFilter = "[Journal] = True" 

Примечание.

Если вы используете кавычки в качестве разделителей с логическими полями, пустая строка будет находить элементы, поля которых имеют значение False , а все непустые строки будут находить элементы с полями True.

Ключевые слова (или категории)

Поле Категории содержит ключевые слова типа, предназначенные для хранения нескольких значений. При программном доступе к нему поле Категории ведет себя как текстовое поле, и строка должна точно соответствовать. Значения в текстовой строке разделяются запятой и пробелом. Обычно это означает, что нельзя использовать методы Find и Restrict в поле ключевых слов, если оно содержит несколько значений. Например, если у вас есть один контакт в категории "Бизнес" и один контакт в категориях "Бизнес" и "Социальные сети", вы не можете легко использовать методы Поиска и ограничения для получения всех элементов, которые находятся в категории "Бизнес". Вместо этого можно выполнить цикл по всем контактам в папке и использовать функцию Instr , чтобы проверить, содержится ли строка "Бизнес" во всем поле ключевых слов.

Примечание.

Возможное исключение — если поле "Категории " ограничено двумя или небольшим количеством значений. Затем можно использовать методы Find и Restrict с логическим оператором OR, чтобы получить все бизнес-контакты. Например (в псевдокоде): "Бизнес" ИЛИ "Бизнес, Личное" или "Личное, Бизнес". В строках категорий регистр не учитывается.

Integer

Можно искать целочисленные поля с кавычками или без в качестве разделителей. Следующие фильтры помогут найти контакты, созданные с помощью Outlook 2000:

sFilter = "[OutlookInternalVersion] = 92711"  
sFilter = "[OutlookInternalVersion] = '92711'"

Использование переменных в составе фильтра

Как показано в примере метода Restrict , значения из переменных можно использовать в составе фильтра. Следующий пример кода Microsoft Visual Basic Scripting Edition (VBScript) иллюстрирует синтаксис, который использует переменные в качестве части фильтра.

sFullName = "Dan Wilson" 

В этом подходе используется chr(34) для разделения значения:

sFilter = "[FullName] = " & Chr(34) & sFullName & Chr(34)

В этом подходе используются двойные кавычки для разделения значения:

sFilter = "[FullName] = """ & sFullName & """"

Использование логических операторов в составе фильтра

Допустимые логические операторы: AND, OR и NOT. Ниже приведены варианты предложения для метода Restrict , поэтому можно указать несколько условий.

ИЛИ. Следующий код возвращает все контактные элементы, у которых в качестве категории "Бизнес" или "Личные".

sFilter = "[Categories] = 'Personal' Or [Categories] = 'Business'" 

И. Следующий код извлекает всех личных контактов, работающих в корпорации Майкрософт.

sFilter = "[Categories] = 'Personal' And [CompanyName] = 'Microsoft'"

НЕТ. Следующий код извлекает все личные контакты, которые не работают в Корпорации Майкрософт.

sFilter = "[Categories] = 'Personal' And Not([CompanyName] = 'Microsoft')"

Дополнительные примечания

Если вы пытаетесь использовать методы Find или Restrict с определяемыми пользователем полями, поля должны быть определены в папке, в противном случае возникнет ошибка. Нет способа выполнить операцию "contains". Например, нельзя использовать функцию "Найти " или "Ограничить " для поиска элементов с определенным словом в поле "Тема ". Вместо этого можно использовать метод AdvancedSearch или выполнить цикл по всем элементам в папке и использовать функцию InStr для поиска в поле. Используйте метод Restrict для поиска элементов, которые начинаются с определенного диапазона символов. Например, чтобы найти все контакты с фамилией, начинавшейся с буквы M, используйте следующий фильтр:

sFilter = "[LastName] > 'LZZZ' And [LastName] < 'N'"

См. также

Объект Items

Поддержка и обратная связь

Есть вопросы или отзывы, касающиеся Office VBA или этой статьи? Руководство по другим способам получения поддержки и отправки отзывов см. в статье Поддержка Office VBA и обратная связь.