在收件箱中搜索主题包含“Office”的项目

本主题显示两个代码示例,这两个示例使用 DASL 查询在“收件箱”中搜索主题行中包含“Office”的项目。 第一个代码示例使用 Folder.GetTable ,第二个代码示例使用 Application.AdvancedSearch 应用 DASL 查询。

每个代码示例在 DASL 筛选器中使用内容索引器关键字 ci_phrasematch ,该属性 https://schemas.microsoft.com/mapi/proptag/0x0037001E (MAPI ID 命名空间引用的 Subject 属性) 在主题中搜索单词“office”。 示例对“收件箱”中的项目应用该筛选器(通过使用 Folder.GetTableApplication.AdvancedSearch),并输出搜索返回的每个项目的主题行。 注意 匹配项不区分大小写,因此 Folder.GetTableApplication.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 支持和反馈,获取有关如何接收支持和提供反馈的指南。