Поиск в папке "Входящие" по запросу "Элементы с темой", содержащей "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 и обратная связь.