共用方式為


在 [收件匣] 中搜尋主旨包含 「Office」 的專案

這個主題會示範兩個程式碼範例,使用 DASL 查詢在 [收件匣] 中搜尋主旨行包含 "Office" 的項目。 第一個程式碼範例使用 Folder.GetTable ,第二個範例則使用 Application.AdvancedSearch 來套用 DASL 查詢。

每個程式碼範例都會在屬性的 https://schemas.microsoft.com/mapi/proptag/0x0037001E DASL 篩選中使用內容索引器關鍵字ci_phrasematch, (MAPI ID 命名空間所參考的Subject 屬性) 搜尋主旨中的 「office」 一字。 接著會將篩選套用至 [收件匣] 中的項目 (使用 Folder.GetTableApplication.AdvancedSearch),並且列印搜尋所傳回之每個項目的主旨行。 注意 相符專案不會區分大小寫,因此 Folder.GetTableApplication.AdvancedSearch會傳回主旨中包含 「Office」 或 「office」 的任何專案。 請注意,每個範例都會列印結果資料表中每個資料列的主 。 為了達成更好的效能,範例選擇使用輕量型 Table 物件而非 Search.Results 物件。 在搜尋任何資料夾後,所傳回的 Table 中都會包含 Subject 屬性。 但是如同 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 支援與意見反應