Application.AdvancedSearch 方法 (Outlook)

根据指定的 DAV 搜索和定位 (DASL) 搜索字符串进行搜索。

语法

expressionAdvancedSearch( _Scope_ , _Filter_ , _SearchSubFolders_ , _Tag_ )

expression:表示 Application 对象的变量。

参数

名称 必需/可选 数据类型 说明
Scope 必需 String 搜索范围。 例如文件夹路径。 建议将文件夹路径括在单引号内。 否则,如果文件夹路径包含特殊字符(包括 Unicode 字符),搜索可能不会返回正确结果。 若要指定多个文件夹路径,请用单引号引起每个文件夹路径,然后再用逗号隔开这些文件夹路径。
Filter 可选 Variant 定义搜索参数的 DASL 搜索筛选器。
SearchSubFolders 可选 Variant 确定搜索是否包括文件夹的子文件夹。
Tag 可选 Variant 指定作为搜索标识符的名称。

返回值

一个表示搜索结果的 Search 对象。

备注

通过调用 AdvancedSearch 方法在连续行代码中,可以同时运行多个搜索。 但是,应该注意: 以编程方式创建大量的搜索文件夹会导致重大同时搜索活动会影响性能的 Outlook 中,在尤其是 Outlook 进行联机 Exchange 模式搜索。

Outlook 对象模型中的 AdvancedSearch 方法和相关功能不会创建将在 Outlook 用户界面中显示的搜索文件夹。 但是,可以使用返回的 Search 对象的 Save 方法创建一个搜索文件夹,该搜索文件夹将显示在 Outlook 用户界面的“搜索文件夹”列表中。

使用 Scope 参数,可以指定同一存储区中的一个或多个文件夹,但不能在多个存储区中指定多个文件夹。 若要在同一个存储为 Scope参数指定多个文件夹,用逗号隔开每个文件夹路径,将每个文件夹路径括在单引号中。 如收件箱或已发送邮件的默认文件夹,可以使用简单的文件夹名称而不是完整的文件夹路径。 例如,以下两行代码表示有效 Scope参数:

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

Filter 参数可以是任何有效的 DASL 查询。 有关 DASL 查询的其他信息,请参阅 按命名空间筛选项引用属性。 请注意,不能对高级搜索的 Filter 参数使用 JET 查询。 如果包含在 Scope参数中指定的文件夹的存储区启用了即时搜索,您可以使用即时搜索关键字提高搜索性能。 如果使用即时搜索关键字并不启用了即时搜索,则 Outlook 会返回错误,搜索将失败。

示例

以下Visual Basic for Applications (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 for Applications 示例使用 AdvancedSearch 方法来创建新的搜索。 由 AdvancedSearch 方法的 Filter 参数指定的搜索参数将返回“收件箱”和“已发送邮件”文件夹中所有主题短语匹配或包含“Office”的项目。 用户的收件箱和已发送的邮件文件夹被指定为搜索的范围,将 SearchSubFolders 属性设置为 True 。 搜索完成后, GetTable 方法调用 搜索 对象性能的搜索结果的枚举。

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 支持和反馈,获取有关如何接收支持和提供反馈的指南。