根据指定的 SQL 搜索字符串进行搜索,并返回 Search 对象。
expression.AdvancedSearch(Scope, Filter, SearchSubFolders, Tag)
expression 必选。该表达式返回 Application 对象。
Scope 必选,String 类型。搜索范围。例如,文件夹的名称。
Filter 可选,Variant 类型。定义搜索参数的 DASL 筛选条件。
SearchSubFolders 可选,Variant 类型。决定该搜索是否包括子文件夹。
Tag 可选,Variant 类型。指定作为搜索标识符的名称。
通过在代码的连续几行中调用 AdvancedSearch 方法可以同时执行多个搜索。但为了获取有意义的结果,请使用 AdvancedSearchComplete 事件通知同步搜索的结束。
以下示例使用 AdvancedSearch 方法创建新的搜索。AdvancedSearch 方法的 Filter 参数指定的搜索参数将返回“收件箱”中所有未标记的项目。
Sub SearchForFlags()
'List all items in the Inbox that do NOT have a flag:
Dim objSch As Search
Const strF As String = "urn:schemas:httpmail:messageflag = 0" & _
" OR urn:schemas:httpmail:messageflag IS NULL"
Const strS As String = "Inbox"
Set objSch = Application.AdvancedSearch(strS, strF)
End Sub
以下示例返回“收件箱”中所有标题为“Office Christmas Party”的项目。参数 Tag 将搜索与一个字符串相关联。这在执行多条搜索时很有用处。
Sub SearchInboxFolder()
'Searches the Inbox
Dim objSch As Search
Const strF As String = "urn:schemas:mailheader:subject = 'Office Christmas Party'"
Const strS As String = "Inbox"
Const strTag As String = "SubjectSearch"
Set objSch = Application.AdvancedSearch(Scope:=strS, _
Filter:=strF, Tag:=strTag)
End Sub
以下示例使用 AdvancedSearchComplete 事件获取搜索的结果。并显示搜索的 Tag 属性以通知用户已完成的搜索。该事件非常重要,因为它通知搜索结束并且使用户可以获取完整和有意义的数据集。这是确定搜索已经完成的唯一方法。
Private Sub Application_AdvancedSearchComplete(ByVal SearchObject As Search)
Dim objRsts As Results
MsgBox "The search " & SearchObject.Tag & "has completed."
Set objRsts = SearchObject.Results
'Print out number in Results collection
Debug.Print objRsts.Count
'Print out each member of Results collection
For Each Item In objRsts
Debug.Print Item
Next
End Sub
也可以同时在多个文件夹上进行搜索。以下示例在用户的“收件箱”、“日历”和“任务”文件夹中搜索所有主题为“Fiftieth Birthday Party”的项目。
Sub SearchForSubject()
'Search for all items with a certain subject
'in multiple folders
Dim objSch As Search
'Search for items where subject is not an empty string
Const strFilter As String = _
"urn:schemas:httpmail:subject = 'Fiftieth Birthday Party'"
'In the Inbox, Calendar, and Tasks folders
Const strScope As String = "'Inbox', 'Calendar', 'Tasks'"
Set objSch = Application.AdvancedSearch(strScope, strFilter)
End Sub