Filtrer le corps d’un élément de courrier
L’exemple de code de cette rubrique montre comment utiliser l’indexation de contenu dans une requête DASL pour rechercher des éléments de courrier qui contiennent un mot spécifique dans le corps.
Cet exemple de code montre comment définir un filtre DASL au niveau de la propriété urn:schemas:httpmail:textdescription (propriété Body référencée par son espace de noms DAV) et comment utiliser le mot clé d'indexation de contenu ci_phrasematch pour rechercher le mot « office » dans le corps. Il montre ensuite comment appliquer le filtre aux éléments contenus dans le dossier actif. Pour accéder aux résultats du filtre, il utilise l’objet Table et imprime la ligne d’objet de chaque élément.
Notez que cet exemple imprime l’objet de chaque ligne de la table retournée ; La propriété Subject est incluse dans une table retournée par une recherche sur n’importe quel dossier. Mais en règle générale, un dossier dans Outlook peut contenir des éléments hétérogènes et n’est pas limité à un seul type d’élément. Si vous souhaitez accéder à une propriété spécifique à un type d’élément, utilisez Columns.Add pour inclure cette propriété et mettre à jour la table. Pour chaque ligne retournée dans la table, vérifiez le type de message de l’élément avant d’accéder à la propriété.
Note L’indexation de contenu dans une requête DASL offre de meilleures performances que le mot clé like . Toutefois, vous pouvez filtrer uniquement sur le texte du corps de l’élément ; si le corps contient des balises HTML, comme dans un élément de courrier au format HTML, les balises ne sont pas filtrées. La correspondance n’étant pas sensible à la casse, par exemple, tout élément contenant « Office » ou « office » dans le corps sera retourné par Folder.GetTable. Vous pouvez également retourner jusqu’aux 255 premiers caractères du corps d’une colonne d’une table, en ajoutant la colonne (indiquée par urn:schemas:httpmail:textdescription) à la table. Vous ne pouvez pas utiliser une requête Jet pour filtrer sur la propriété Body .
Sub RestrictUsingBody()
Dim strFilter As String
Dim oT As Table
Dim oRow as Row
'Create DASL query for Body using content indexing phrase match for 'office'
strFilter = "@SQL=" & Chr(34) & "urn:schemas:httpmail:textdescription" _
& Chr(34) & " ci_phrasematch 'office'"
'Obtain Table by applying the filter on the current folder
Set oT = Application.ActiveExplorer.CurrentFolder.GetTable(strFilter)
'Print subject line of each mail item in current folder that contains 'office' in the body
Do Until oT.EndOfTable
Set oRow = oT.GetNextRow
Debug.Print oRow("Subject")
Loop
End Sub
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.