在收件箱中搜索主题包含“Office”的项目
本主题显示两个代码示例,这两个示例使用 DASL 查询在“收件箱”中搜索主题行中包含“Office”的项目。 第一个代码示例使用 Folder.GetTable ,第二个代码示例使用 Application.AdvancedSearch 应用 DASL 查询。
每个代码示例在 DASL 筛选器中使用内容索引器关键字 ci_phrasematch ,该属性 https://schemas.microsoft.com/mapi/proptag/0x0037001E
(MAPI ID 命名空间引用的 Subject 属性) 在主题中搜索单词“office”。 示例对“收件箱”中的项目应用该筛选器(通过使用 Folder.GetTable 或 Application.AdvancedSearch),并输出搜索返回的每个项目的主题行。
注意 匹配项不区分大小写,因此 Folder.GetTable 或 Application.AdvancedSearch 将返回主题中包含“Office”或“office”的任何项目。 请注意,每个示例打印结果 表中每一行的主题。 为了获得更佳的性能,每个示例都选择使用更轻的 Table 对象替代 Search.Results 对象。 Subject 属性包含在对任一文件夹的搜索返回的 Table 中。
但是,与 Outlook 中的任何文件夹一样,“收件箱”可以包含相异的项目,且不限于邮件项目。 如果要访问特定于收件箱中特定项目类型的属性,请使用 Columns.Add 包含该属性并更新 Table,并且对于 Table 中返回的每一行,请在访问该属性之前检查该项目的邮件类型。
本代码示例使用 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 支持和反馈,获取有关如何接收支持和提供反馈的指南。