Méthode Application.AdvancedSearch (Outlook)
Effectue une recherche basée sur une chaîne de recherche DASL (DAV Searching and Locating) spécifiée.
Syntaxe
expression. AdvancedSearch
( _Scope_
, _Filter_
, _SearchSubFolders_
, _Tag_
)
expressionUne variable qui représente un objetApplication.
Paramètres
Nom | Requis/Facultatif | Type de données | Description |
---|---|---|---|
Scope | Obligatoire | Chaîne | Portée de la recherche. Par exemple, le chemin d'accès à un dossier. Il est recommandé que le chemin du dossier soit placé entre guillemets simples. Sinon, la recherche risque de ne pas renvoyer de résultats corrects si le chemin contient des caractères spéciaux, y compris des caractères Unicode. Pour spécifier plusieurs chemins, encadrez chacun d'eux par des guillemets simples et séparez-les par une virgule. |
Filter | Facultatif | Variante | Filtre de recherche DASL qui définit les paramètres de la recherche. |
SearchSubFolders | Facultatif | Variante | Détermine si la recherche inclut certains ou tous les sous-dossiers du dossier. |
Tag | Facultatif | Variante | Nom donné en tant qu’identificateur pour la recherche. |
Valeur renvoyée
Objet Search qui représente les résultats de la recherche.
Remarques
Vous pouvez effectuer plusieurs recherches simultanées en appelant la méthode AdvancedSearch sur plusieurs lignes de code. Toutefois, sachez que lorsque vous créez par programme un grand nombre de dossiers de recherche, l’activité générée par les recherches simultanées peut avoir des répercussions négatives sur les performances d’Outlook, surtout si Outlook effectue les recherches en mode Exchange en ligne.
La méthode AdvancedSearch et les fonctionnalités associées dans le modèle objet Outlook ne créent pas de dossier de recherche qui s’affiche dans l’interface utilisateur d’Outlook. Vous pouvez cependant utiliser la méthode Save de l'objet Search qui est renvoyée pour créer un dossier de recherche présent dans la liste de dossiers de recherche de l'interface utilisateur Outlook.
À l’aide du paramètre Scope , vous pouvez spécifier un ou plusieurs dossiers dans le même magasin, mais vous ne pouvez pas spécifier plusieurs dossiers dans plusieurs magasins. Pour spécifier plusieurs dossiers compris dans le même magasin pour le paramètre Scope, encadrez chaque chemin d'accès de dossier par des guillemets simples et insérez des virgules pour séparer ces chemins. Pour les dossiers par défaut tels que Boîte de réception ou Éléments envoyés, vous pouvez utiliser simplement le nom du dossier au lieu de saisir l'intégralité du chemin d'accès. Par exemple, les deux lignes de code suivantes représentent des paramètres Scope valides :
Scope = "'Inbox', 'Sent Items'"
Scope = "'" & Application.Session.GetDefaultFolder(olFolderInbox).FolderPath _
& "','" & Application.Session.GetDefaultFolder(olFolderSentMail).FolderPath & "'"
Le paramètre Filter peut être n’importe quelle requête DASL valide. Pour plus d'informations sur les requêtes DASL, voir Filtrage des éléments et Référencer les propriétés par un espace de noms. Notez que vous ne pouvez pas utiliser une requête JET pour le paramètre Filter de recherche avancée. Si la recherche instantanée est activée sur une banque qui contient un dossier spécifié dans le paramètre Scope, vous pouvez utiliser les mots clés de recherche instantanée pour obtenir de meilleurs résultats. Si vous utilisez des mots clés de recherche instantanée et que la recherche instantanée n’est pas activée, Outlook renvoie une erreur et votre recherche échoue.
Exemple
L’exemple Visual Basic pour Applications (VBA) suivant recherche dans la boîte de réception des éléments dont l’objet est test et affiche les noms des expéditeurs des éléments de messagerie renvoyés par la recherche. La procédure événementielle AdvancedSearchComplete attribue la valeur blnSearchComp
à la variable booléenne à la fin de la recherche. Cette variable booléenne est utilisée par la procédure TestAdvancedSearchComplete()
pour déterminer à quel moment se termine la recherche. L’exemple de code doit être placé dans un module de classe tel que ThisOutlookSession
, et la TestAdvancedSearchComplete()
procédure doit être appelée avant que la procédure événementielle puisse être appelée par 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
L’exemple Microsoft Visual Basic pour Applications suivant indique comment utiliser la méthode AdvancedSearch pour créer une recherche. Les paramètres de la recherche, comme spécifié par l’argument Filter de la méthode AdvancedSearch, renvoie tous les éléments des dossiers Boîte de réception et Éléments envoyés lorsque l’objet est équivalent à « Office » ou contient « Office ». Les dossiers Boîte de réception et Éléments envoyés de l’utilisateur sont spécifiés comme étendue de la recherche et la propriété SearchSubFolders est définie sur True. Une fois la recherche terminée, la méthode GetTable est appelée sur l’objet Search pour l’énumération performante des résultats de la recherche.
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
Voir aussi
Assistance et commentaires
Avez-vous des questions ou des commentaires sur Office VBA ou sur cette documentation ? Consultez la rubrique concernant l’assistance pour Office VBA et l’envoi de commentaires afin d’obtenir des instructions pour recevoir une assistance et envoyer vos commentaires.