共用方式為


篩選訊息項目的本文

本主題中的程式碼範例示範如何在 DASL 查詢中使用內容索引,來搜尋內文中包含特定字組的訊息項目。

在程式碼範例中,會在屬性 urn:schemas:httpmail:textdescription (DAV 命名空間所參照的 Body 屬性) 上使用內容索引子關鍵字 ci_phrasematch,搜尋本文中的單字 "office"。 然後將篩選套用至目前資料夾中的項目。 若要存取篩選結果,它會使用 Table 物件並列印每個專案的主旨行。

請注意,這個範例會列印所傳回 Table 中的每列主旨;在搜尋任何資料夾後,所傳回的 Table 都會包含 Subject 屬性。 但一般而言,Outlook 中的資料夾可以包含異質專案,且不限於單一專案類型。 如果您想要存取專案類型特定的屬性,請使用 Columns.Add 來包含該屬性並更新 Table,並針對 Table中傳回的每個資料列,在存取屬性之前檢查項目的訊息類型。

注意 DASL 查詢中的內容索引編制會提供比 like 關鍵字更好的效能。 然而,您只能篩選項目本文文字;如果本文如同 HTML 格式的郵件項目含有 HTML 標籤,則不會篩選標籤。 比對不會區分大小寫,例如, Folder.GetTable 會傳回本文中含有 "Office" 或 "office" 的任何項目。 將欄 (urn:schemas:httpmail:textdescription 所表示) 新增至 Table,您也可以在 Table 欄中最多傳回本文的前 255 個字元。 不能使用 Jet 查詢篩選 Body 屬性。

Sub RestrictUsingBody() 
 Dim strFilter As String 
 Dim oT As Table 
 Dim oRow as Row 
 
 'Create DASL query for Body using content indexing phrase match for 'office' 
 strFilter = "@SQL=" & Chr(34) & "urn:schemas:httpmail:textdescription" _ 
 & Chr(34) & " ci_phrasematch 'office'" 
 'Obtain Table by applying the filter on the current folder 
 Set oT = Application.ActiveExplorer.CurrentFolder.GetTable(strFilter) 
 'Print subject line of each mail item in current folder that contains 'office' in the body 
 Do Until oT.EndOfTable 
 Set oRow = oT.GetNextRow 
 Debug.Print oRow("Subject") 
 Loop 
End Sub

支援和意見反應

有關於 Office VBA 或這份文件的問題或意見反應嗎? 如需取得支援服務並提供意見反應的相關指導,請參閱 Office VBA 支援與意見反應