次の方法で共有


Application.AdvancedSearch メソッド (Outlook)

指定された DAV Searching and Locating (DASL) 検索文字列に基づいて検索を実行します。

構文

expression. AdvancedSearch( _Scope_ , _Filter_ , _SearchSubFolders_ , _Tag_ )

expressionApplication オブジェクトを 表す変数。

パラメーター

名前 必須 / オプション データ型 説明
Scope 必須 文字列型 (String) 検索範囲を指定します。 たとえば、フォルダー パスなどを指定します。 フォルダー パスは、単一引用符で囲んでおくことをお勧めします。 単一引用符で囲まなかった場合、フォルダー パスに Unicode の文字が含まれていると、正しい結果を取得できないことがあります。 複数のフォルダー パスを指定するには、各フォルダー パスを単一引用符で囲み、コンマで区切ります。
Filter 省略可能 バリアント型 (Variant) 検索のパラメーターを定義する DASL 検索フィルターを指定します。
SearchSubFolders 省略可能 バリアント型 (Variant) フォルダー内のサブフォルダーを検索するかどうかを指定します。
Tag 省略可能 バリアント型 (Variant) 検索の識別子として指定する名前です。

戻り値

検索の結果を表す Search オブジェクト。

注釈

連続するコード行で AdvancedSearch メソッドを呼び出し、複数の検索を同時に実行することもできます。 ただし、多数の検索フォルダーをプログラム上で作成すると、検索処理が同時に多数行われるため、特にオンライン Exchange モードで検索を実行する場合などは、Outlook のパフォーマンスが影響を受けます。

Outlook オブジェクト モデルの AdvancedSearch メソッドと関連機能では、Outlook ユーザー インターフェイスに表示される検索フォルダーは作成されません。 ただし、返された Search オブジェクトの Save メソッドを使用すると、Outlook のユーザー インターフェイスの検索フォルダーの一覧に表示される検索フォルダーを作成することができます。

Scope パラメーターを使用すると、同じストア内の 1 つ以上のフォルダーを指定できますが、複数のストアに複数のフォルダーを指定することはできません。 Scope パラメーターで同じストアに複数のフォルダーを指定するには、各フォルダーのパスの間にコンマ文字を使用し、各フォルダーのパスを単一引用符で囲みます。 受信トレイや送信済みアイテムなどの既定のフォルダーでは、完全なフォルダー パスではなく、単純なフォルダー名を使用できます。 たとえば、次の 2 行のコードは、有効な Scope のパラメーターを表します。

Scope = "'Inbox', 'Sent Items'"
Scope = "'" & Application.Session.GetDefaultFolder(olFolderInbox).FolderPath _  
    & "','" & Application.Session.GetDefaultFolder(olFolderSentMail).FolderPath & "'"

Filter パラメーターには、任意の有効な DASL クエリを指定できます。 DASL クエリの詳細については、「 アイテムをフィルターにかける」、および「 名前空間でプロパティを参照する」を参照してください。 高度な検索の Filter パラメーターには JET クエリを使用できないことに注意してください。 Scope パラメーターで指定されたフォルダーが含まれるストアでクイック検索が有効になっている場合は、クイック検索キーワードを使用して検索のパフォーマンスを向上させることができます。 クイック検索が無効なときにクイック検索キーワードを使用すると、Outlook はエラーを返し、検索は失敗します。

次のVisual Basic for Applications (VBA) の例では、件名が Test と等しいアイテムを受信トレイで検索し、検索によって返された電子メール アイテムの送信者の名前を表示します。 AdvancedSearchComplete イベント プロシージャは、検索が完了したときにブール値を True に設定しますblnSearchComp。 このブール変数は、検索が TestAdvancedSearchComplete() 完了したタイミングを判断するためにプロシージャによって使用されます。 サンプル コードは、 などの ThisOutlookSessionクラス モジュールに配置する必要があり、イベント プロシージャを TestAdvancedSearchComplete() Outlook から呼び出す前にプロシージャを呼び出す必要があります。

Public blnSearchComp As Boolean  
  
Private Sub Application_AdvancedSearchComplete(ByVal SearchObject As Search)  
    Debug.Print "The AdvancedSearchComplete Event fired"  
    If SearchObject.Tag = "Test" Then  
        m_SearchComplete = True  
    End If  
  
End Sub  
  
Sub TestAdvancedSearchComplete()  
    Dim sch As Outlook.Search  
    Dim rsts As Outlook.Results  
    Dim i As Integer  
    blnSearchComp = False  
    Const strF As String = "urn:schemas:mailheader:subject = 'Test'"  
    Const strS As String = "Inbox"     
    Set sch = Application.AdvancedSearch(strS, strF, "Test")   
    While blnSearchComp = False  
        DoEvents  
    Wend   
    Set rsts = sch.Results  
    For i = 1 To rsts.Count  
        Debug.Print rsts.Item(i).SenderName  
    Next  
End Sub

次の Microsoft Visual Basic for Applications の例は、AdvancedSearch メソッドを使用して新しい検索を作成します。 AdvancedSearch メソッドの Filter 引数で指定された検索のパラメーターは、Subject フレーズが一致するか"Office" が含まれる受信トレイフォルダーおよび送信済みアイテム フォルダー内のすべてのアイテムを返します。 検索の範囲にはユーザーの受信トレイ フォルダーと送信済みアイテム フォルダーが指定されており、 SearchSubFolders プロパティは True に設定されています。 検索が終了すると、検索結果を効率的に列挙するために、 Search オブジェクトに対して GetTable メソッドが呼び出されます。

Public m_SearchComplete As Boolean  
  
Private Sub Application_AdvancedSearchComplete(ByVal SearchObject As Search)  
    If SearchObject.Tag = "MySearch" Then  
        m_SearchComplete = True  
    End If  
End Sub  
  
Sub TestSearchForMultipleFolders()  
    Dim Scope As String  
    Dim Filter As String  
    Dim MySearch As Outlook.Search  
    Dim MyTable As Outlook.Table  
    Dim nextRow As Outlook.Row  
    m_SearchComplete = False  
    'Establish scope for multiple folders  
    Scope = "'" & Application.Session.GetDefaultFolder( _  
    olFolderInbox).FolderPath _  
    & "','" & Application.Session.GetDefaultFolder( _  
    olFolderSentMail).FolderPath & "'"  
    'Establish filter  
    If Application.Session.DefaultStore.IsInstantSearchEnabled Then  
        Filter = Chr(34) & "urn:schemas:httpmail:subject" _  
        & Chr(34) & " ci_phrasematch 'Office'"  
    Else  
        Filter = Chr(34) & "urn:schemas:httpmail:subject" _  
        & Chr(34) & " like '%Office%'"  
    End If  
    Set MySearch = Application.AdvancedSearch( _  
    Scope, Filter, True, "MySearch")  
    While m_SearchComplete <> True  
        DoEvents  
    Wend  
    Set MyTable = MySearch.GetTable  
    Do Until MyTable.EndOfTable  
        Set nextRow = MyTable.GetNextRow()  
        Debug.Print nextRow("Subject")  
    Loop  
End Sub

関連項目

Application オブジェクト

サポートとフィードバック

Office VBA またはこの説明書に関するご質問やフィードバックがありますか? サポートの受け方およびフィードバックをお寄せいただく方法のガイダンスについては、Office VBA のサポートおよびフィードバックを参照してください。