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


Поиск в папке "Входящие" по запросу "Элементы с темой", содержащей "Office"

В этом разделе показаны два примера кода, в котором запросы DASL используются для поиска элементов в папке "Входящие", содержащих "Office" в строке темы. В первом примере кода используется Folder.GetTable , а во втором используется Application.AdvancedSearch для применения запроса DASL.

Каждый из примеров кода использует ключевое слово индексатора контента ci_phrasematch в фильтре DASL для свойства https://schemas.microsoft.com/mapi/proptag/0x0037001E (свойство Subject , на которое ссылается пространство имен MAPI ID) для поиска слова "office" в теме. Он применяет фильтр к элементам в папке "Входящие" (с помощью Folder.GetTable или Application.AdvancedSearch) и выводит строку темы каждого элемента, возвращенного из поиска. Примечание Совпадение не учитывает регистр, поэтому любой элемент, содержащий "Office" или "office" в теме, будет возвращен Folder.GetTable или Application.AdvancedSearch. Обратите внимание, что каждый пример выводит тему каждой строки в результирующей таблице. Для повышения производительности он выбирает использовать более легкий объект Table вместо объекта Search.Results . Свойство Subject включается в таблицу, возвращаемую при поиске в любой папке. Но, как и любая папка в Outlook, папка "Входящие" может содержать разнородные элементы и не ограничивается почтовыми элементами. Если вы хотите получить доступ к свойству, относящееся к определенному типу элемента в папке "Входящие", используйте Columns.Add , чтобы включить это свойство и обновить таблицу, а для каждой строки, возвращаемой в таблице, проверьте тип сообщения элемента перед доступом к свойству. В этом примере кода для поиска используется Folder.GetTable :

Sub RestrictTableForInbox() 
    Dim oT As Outlook.Table 
    Dim strFilter As String 
    Dim oRow As Outlook.Row 
     
    'Construct filter for Subject containing 'Office' 
    Const PropTag  As String = "https://schemas.microsoft.com/mapi/proptag/" 
    strFilter = "@SQL=" & Chr(34) & PropTag _ 
        & "0x0037001E" & Chr(34) & " ci_phrasematch 'Office'" 
     
    'Do search and obtain Table on Inbox 
    Set oT = Application.Session.GetDefaultFolder(olFolderInbox).GetTable(strFilter) 
     
    'Print Subject of each returned item 
    Do Until oT.EndOfTable 
        Set oRow = oT.GetNextRow 
        Debug.Print oRow("Subject") 
    Loop 
End Sub

В этом примере кода для поиска используется Application.AdvancedSearch :

Public blnSearchComp As Boolean 
Private Sub Application_AdvancedSearchComplete(ByVal SearchObject As Search) 
    MsgBox "The AdvancedSearchComplete Event fired" 
    blnSearchComp = True 
End Sub 
 
Sub TestSearchWithTable() 
    Dim oSearch As Search 
    Dim oTable As Table 
    Dim strQuery As String 
    Dim oRow As Row 
         
    blnSearchComp = False 
     
    'Construct filter. 0x0037001E represents Subject 
    strQuery = _ 
        "https://schemas.microsoft.com/mapi/proptag/0x0037001E" & _ 
        " ci_phrasematch 'Office'" 
     
    'Do search 
    Set oSearch = _ 
        Application.AdvancedSearch("Inbox", strQuery, False, "Test") 
    While blnSearchComp = False 
        DoEvents 
    Wend 
 
    'Obtain Table 
    Set oTable = oSearch.GetTable 
     
    'Print Subject of each returned item 
    Do Until oTable.EndOfTable 
        Set oRow = oTable.GetNextRow 
        Debug.Print oRow("Subject") 
    Loop 
End Sub

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

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