Share via


(Outlook) 的 Application.AdvancedSearch 方法

會根據指定的 DAV 搜尋及尋找 (DASL) 搜尋字串來執行搜尋。

語法

運算式AdvancedSearch( _Scope_ , _Filter_ , _SearchSubFolders_ , _Tag_ )

expression 代表 Application 物件的變數。

參數

名稱 必要/選用 資料類型 描述
Scope 必要 字串 搜尋的範圍。 例如,資料夾的資料夾路徑。 建議將資料夾路徑括在單引號內。 否則,如果資料夾路徑包含特殊字元,包括 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。 當搜尋完成時,會在Search物件上呼叫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 支援與意見反應