在 [收件匣] 中搜尋主旨包含 「Office」 的專案
這個主題會示範兩個程式碼範例,使用 DASL 查詢在 [收件匣] 中搜尋主旨行包含 "Office" 的項目。 第一個程式碼範例使用 Folder.GetTable ,第二個範例則使用 Application.AdvancedSearch 來套用 DASL 查詢。
每個程式碼範例都會在屬性的 https://schemas.microsoft.com/mapi/proptag/0x0037001E
DASL 篩選中使用內容索引器關鍵字ci_phrasematch, (MAPI ID 命名空間所參考的Subject 屬性) 搜尋主旨中的 「office」 一字。 接著會將篩選套用至 [收件匣] 中的項目 (使用 Folder.GetTable 或 Application.AdvancedSearch),並且列印搜尋所傳回之每個項目的主旨行。
注意 相符專案不會區分大小寫,因此 Folder.GetTable 或 Application.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 支援與意見反應。