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


Метод Application.AdvancedSearch (Outlook)

Выполняет поиск на основе указанной строки поиска DAV Search and Locating (DASL).

Синтаксис

выражение. AdvancedSearch( _Scope_ , _Filter_ , _SearchSubFolders_ , _Tag_ )

выражение: переменная, представляющая объект Application.

Параметры

Имя Обязательный или необязательный Тип данных Описание
Scope Обязательный String Область поиска. Например, путь к папке. Рекомендуется, чтобы путь к папке был заключен в одинарные кавычки. В противном случае поиск может не возвращать правильные результаты, если путь к папке содержит специальные символы, включая символы Юникода. Чтобы указать несколько путей к папкам, заключите каждый путь к папке в одинарные кавычки и разделите пути к папкам с одними кавычками с помощью запятой.
Фильтр Необязательный Variant Фильтр поиска DASL, определяющий параметры поиска.
SearchSubFolders Необязательный Variant Определяет, будет ли поиск включать какие-либо вложенные папки папки.
Tag Необязательный Variant Имя, заданное в качестве идентификатора для поиска.

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

Объект Search , представляющий результаты поиска.

Замечания

Вы можете одновременно выполнить несколько поисковых запросов, вызвав метод AdvancedSearch в последовательных строках кода. Однако следует помнить, что программное создание большого количества папок поиска может привести к значительным одновременным действиям поиска, что повлияет на производительность Outlook, особенно если Outlook ведет поиск в режиме Exchange в интернете.

Метод AdvancedSearch и связанные функции в объектной модели Outlook не создают папку поиска, которая будет отображаться в пользовательском интерфейсе Outlook. Однако можно использовать метод Save возвращаемого объекта Search , чтобы создать папку поиска, которая будет отображаться в списке Папки поиска в пользовательском интерфейсе Outlook.

С помощью параметра Scope можно указать одну или несколько папок в одном хранилище, но нельзя указывать несколько папок в нескольких хранилищах. Чтобы указать несколько папок в одном хранилище для параметра Scope , используйте символ-запятую между каждым путем к папке и заключите каждый путь к папке в один кавычки. Для папок по умолчанию, таких как "Входящие" или "Отправленные", можно использовать простое имя папки вместо полного пути к папке. Например, следующие две строки кода представляют допустимые параметры области :

Scope = "'Inbox', 'Sent Items'"
Scope = "'" & Application.Session.GetDefaultFolder(olFolderInbox).FolderPath _  
    & "','" & Application.Session.GetDefaultFolder(olFolderSentMail).FolderPath & "'"

Параметр Filter может быть любым допустимым запросом DASL. Дополнительные сведения о запросах DASL см. в статьях Фильтрация элементов и Ссылка на свойства по пространству имен. Обратите внимание, что нельзя использовать запрос JET для параметра Filter расширенного поиска. Если в хранилище, содержащем папку, указанную в параметре Scope , включен мгновенный поиск, можно использовать ключевые слова мгновенного поиска, чтобы повысить производительность поиска. Если вы используете ключевые слова мгновенного поиска и мгновенный поиск не включен, Outlook вернет ошибку, и поиск завершится ошибкой.

Пример

В следующем примере Visual Basic для приложений (VBA) выполняется поиск в папке "Входящие" элементов с субъектом, равным Test, и отображаются имена отправителей элементов электронной почты, возвращенных поиском. Процедура события AdvancedSearchComplete устанавливает логическое blnSearchComp значение True после завершения поиска. Эта логическая переменная используется процедурой TestAdvancedSearchComplete() для определения завершения поиска. Пример кода должен быть помещен в модуль класса, например ThisOutlookSession, и процедура должна быть вызвана TestAdvancedSearchComplete() , прежде чем процедура события может быть вызвана Outlook.

Public blnSearchComp As Boolean  
  
Private Sub Application_AdvancedSearchComplete(ByVal SearchObject As Search)  
    Debug.Print "The AdvancedSearchComplete Event fired"  
    If SearchObject.Tag = "Test" Then  
        m_SearchComplete = True  
    End If  
  
End Sub  
  
Sub TestAdvancedSearchComplete()  
    Dim sch As Outlook.Search  
    Dim rsts As Outlook.Results  
    Dim i As Integer  
    blnSearchComp = False  
    Const strF As String = "urn:schemas:mailheader:subject = 'Test'"  
    Const strS As String = "Inbox"     
    Set sch = Application.AdvancedSearch(strS, strF, "Test")   
    While blnSearchComp = False  
        DoEvents  
    Wend   
    Set rsts = sch.Results  
    For i = 1 To rsts.Count  
        Debug.Print rsts.Item(i).SenderName  
    Next  
End Sub

В следующем примере Microsoft Visual Basic для приложений использует метод AdvancedSearch для создания нового поиска. Параметры поиска, заданные аргументом Filter метода AdvancedSearch , возвращают все элементы в папках "Входящие" и "Отправленные", где фраза"Тема" соответствует или содержит "Office". Папки "Входящие" и "Отправленные" пользователя указываются в качестве области поиска, а для свойства SearchSubFolders задано значение True. После завершения поиска метод GetTable вызывается в объекте Search для выполнения перечисления результатов поиска.

Public m_SearchComplete As Boolean  
  
Private Sub Application_AdvancedSearchComplete(ByVal SearchObject As Search)  
    If SearchObject.Tag = "MySearch" Then  
        m_SearchComplete = True  
    End If  
End Sub  
  
Sub TestSearchForMultipleFolders()  
    Dim Scope As String  
    Dim Filter As String  
    Dim MySearch As Outlook.Search  
    Dim MyTable As Outlook.Table  
    Dim nextRow As Outlook.Row  
    m_SearchComplete = False  
    'Establish scope for multiple folders  
    Scope = "'" & Application.Session.GetDefaultFolder( _  
    olFolderInbox).FolderPath _  
    & "','" & Application.Session.GetDefaultFolder( _  
    olFolderSentMail).FolderPath & "'"  
    'Establish filter  
    If Application.Session.DefaultStore.IsInstantSearchEnabled Then  
        Filter = Chr(34) & "urn:schemas:httpmail:subject" _  
        & Chr(34) & " ci_phrasematch 'Office'"  
    Else  
        Filter = Chr(34) & "urn:schemas:httpmail:subject" _  
        & Chr(34) & " like '%Office%'"  
    End If  
    Set MySearch = Application.AdvancedSearch( _  
    Scope, Filter, True, "MySearch")  
    While m_SearchComplete <> True  
        DoEvents  
    Wend  
    Set MyTable = MySearch.GetTable  
    Do Until MyTable.EndOfTable  
        Set nextRow = MyTable.GetNextRow()  
        Debug.Print nextRow("Subject")  
    Loop  
End Sub

См. также

Объект Application

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

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