"Office" を含む件名のアイテムを受信トレイで検索する
このトピックでは、DASL クエリを使用して、受信トレイのアイテムのうちで件名に "Office" を含むものを検索する 2 つのコード サンプルを示します。 最初のコード サンプルでは Folder.GetTable を 使用し、2 番目のコード サンプルでは Application.AdvancedSearch を使用して DASL クエリを適用します。
各コード サンプルでは、プロパティ (MAPI ID 名前空間によって参照される Subject プロパティhttps://schemas.microsoft.com/mapi/proptag/0x0037001E
) の DASL フィルター内のコンテンツ インデクサー キーワード ci_phrasematchを使用して、件名の "office" という単語を検索します。 これは、受信トレイ内のアイテムにフィルターを適用し (Folder.GetTable または Application.AdvancedSearch を使用します)、検索から返された各アイテムの件名を出力します。
メモ 一致は大文字と小文字が区別されないため、件名に "Office" または "office" を含むアイテムは Folder.GetTable または Application.AdvancedSearch によって返されます。 各サンプルでは、結果の Table 内の各行の件名が出力されます。 パフォーマンスを向上させるために、Search.Results オブジェクトの代わりに軽量の Table オブジェクトを使用することを選択します。 Subject プロパティは、任意のフォルダーの検索によって返される Table に含まれます。
ただし、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 のサポートおよびフィードバックを参照してください。