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.
Hinweise
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 ThisOutlookSession
platziert 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
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.