Application.AdvancedSearch-Methode (Outlook)

Führt eine auf einer angegebenen DASL-Suchzeichenfolge (DAV Searching and Locating) basierende Suche aus.

Syntax

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

expression Eine Variable, die ein Application-Objekt darstellt.

Parameter

Name Erforderlich/Optional Datentyp Beschreibung
Scope Erforderlich String Der Bereich der Suche. Beispielsweise der Ordnerpfad eines Ordners. Es wird empfohlen, den Ordnerpfad in einfache Anführungszeichen einzuschließen. Andernfalls liefert die Suche möglicherweise keine richtigen Ergebnisse, wenn der Ordnerpfad Sonderzeichen einschließlich Unicode-Zeichen enthält. Um mehrere Ordnerpfade anzugeben, schließen Sie jeden Ordnerpfad in einfache Anführungszeichen ein, und trennen Sie die in einfache Anführungszeichen eingeschlossenen Verzeichnispfade durch ein Komma.
Filter Optional Variant Der DASL-Suchfilter, der die Parameter der Suche definiert.
SearchSubFolders Optional Variant Bestimmt, ob die Suche Unterordner des Ordners einschließt.
Tag Optional Variant Der der Suche als Bezeichner zugewiesene Name.

Rückgabewert

Ein Search-Objekt , das die Ergebnisse der Suche darstellt.

HinwBemerkungeneise

Es können zugleich mehrere Suchvorgänge durchgeführt werden, indem die AdvancedSearch-Methode in aufeinander folgenden Codezeilen aufgerufen wird. Sie sollten sich jedoch bewusst sein, dass das programmgesteuerte Erstellen einer großen Anzahl von Suchordnern zu umfangreichen gleichzeitigen Suchaktivitäten führen kann, die sich auf die Leistung von Outlook auswirken können, insbesondere, wenn Outlook die Suche im Exchange-Onlinemodus ausführt.

Die AdvancedSearch-Methode und die zugehörigen Features im Outlook-Objektmodell erstellen keinen Suchordner, der auf der Outlook-Benutzeroberfläche angezeigt wird. Sie können jedoch die Save -Methode des zurückgegebenen Search-Objekts verwenden, um einen Suchordner zu erstellen, der in der Suchordnerliste in der Outlook-Benutzerschnittstelle angezeigt wird.

Mit dem Parameter Scope können Sie einen oder mehrere Ordner im selben Speicher angeben, aber sie dürfen nicht mehrere Ordner in mehreren Speichern angeben. Um mehrere Ordner im gleichen Speicher für den Scope-Parameter anzugeben, verwenden Sie ein Komma zwischen jedem Ordnerpfad und setzen jeden Ordnerpfad in einfache Anführungszeichen. Für Standardordner wie "Posteingang" oder "Gesendete Objekte" können Sie den einfachen Ordnernamen anstelle des vollständigen Ordnerspfads verwenden. Die folgenden beiden Codezeilen stellen zum Beispiel gültige Scope-Parameter dar:

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

Der Filter-Parameter kann eine beliebige gültige DASL-Abfrage sein. Weitere Informationen über DASL-Abfragen finden Sie unter Filtern von Elementen und Verweisen auf Eigenschaften mithilfe von Namespaces. Beachten Sie, dass Sie keine JET-Abfrage für den Filter-Parameter der erweiterten Suche verwenden können. Wenn die Sofortsuche für einen Speicher aktiviert ist, der einen im Scope-Parameter angegebenen Ordner enthält, können Sie Schlüsselwörter für die Sofortsuche verwenden, um die Leistung der Suche zu verbessern. Wenn Sie Sofortsuche-Schlüsselwörter verwenden und die Sofortsuche nicht aktiviert ist, gibt Outlook einen Fehler zurück und die Suche schlägt fehl.

Beispiel

Das folgende beispiel für Visual Basic for Applications (VBA) durchsucht den Posteingang nach Elementen, deren Betreff gleich Test ist, und zeigt die Namen der Absender der von der Suche zurückgegebenen E-Mail-Elemente an. Die AdvancedSearchComplete-Ereignisprozedur legt den booleschen Wert blnSearchComp auf TRUE fest, wenn die Suche abgeschlossen ist. Diese boolesche Variable wird von der TestAdvancedSearchComplete()-Prozedur verwendet, um zu bestimmen, wann die Suche abgeschlossen ist. Der Beispielcode muss in einem Klassenmodul wie ThisOutlookSessionplatziert werden, und die TestAdvancedSearchComplete() Prozedur muss aufgerufen werden, bevor die Ereignisprozedur von Outlook aufgerufen werden kann.

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

Im folgenden Microsoft Visual Basic for Applications Beispiel wird die AdvancedSearch-Methode verwendet, um eine neue Suche zu erstellen. Die Parameter der Suche, die durch das Argument Filter der AdvancedSearch-Methode angegeben werden, geben alle Elemente in den Ordnern "Posteingang" und "Gesendete Elemente" zurück, in denen die Betreffzeile übereinstimmt oder "Office" enthält. Die Ordner "Posteingang" und "Gesendete Elemente" des Benutzers werden als Bereich der Suche angegeben, und die SearchSubFolders-Eigenschaft wird auf TRUE festgelegt. Wenn die Suche abgeschlossen ist, wird die GetTable-Methode für das Search-Objekt für eine leistungsstarke Aufzählung der Suchergebnisse aufgerufen.

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

Siehe auch

Application-Objekt

Support und Feedback

Haben Sie Fragen oder Feedback zu Office VBA oder zu dieser Dokumentation? Unter Office VBA-Support und Feedback finden Sie Hilfestellung zu den Möglichkeiten, wie Sie Support erhalten und Feedback abgeben können.