"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 のサポートおよびフィードバックを参照してください。