メール アイテムの本文をフィルター処理する
このトピックのコード サンプルでは、DASL クエリでコンテンツ インデックス作成を使用して、本文に特定の単語を含むメール アイテムを検索する方法を示します。
このコード サンプルでは、プロパティ urn:schemas:httpmail:textdescription (DAV 名前空間により参照した Body プロパティ) に基づく DASL フィルターを設定し、コンテンツ インデクサー キーワード ci_phrasematch を使用して、本文から "office" という単語を検索します。 次に、現在のフォルダーのアイテムにフィルターを適用します。 フィルター結果にアクセスするには、 Table オブジェクトを使用し、各項目の件名行を出力します。
このサンプルでは、返された Table 内の各行の件名が出力されます。 Subject プロパティは、任意のフォルダーの検索によって返される Table に含まれます。 ただし、一般に、Outlook のフォルダーには異種アイテムを含めることができるので、1 つのアイテムの種類に限定されません。 項目の種類に固有のプロパティにアクセスする場合は、 Columns.Add を 使用してそのプロパティを含めて Table を更新し、 Table で返される各行について、プロパティにアクセスする前にアイテムのメッセージの種類を確認します。
メモ DASL クエリでのコンテンツ インデックス作成は、 like キーワードよりも優れたパフォーマンスを提供します。 ただし、アイテム本文のテキストに対してのみフィルター処理できます。HTML 形式のメール アイテムのように、本文に HTML タグが含まれている場合、タグはフィルター処理されません。 一致は大文字と小文字が区別されないため、たとえば、本文に "Office" または "office" を含むアイテムは Folder.GetTable によって返されます。 また、(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 のサポートおよびフィードバックを参照してください。