Método Application.AdvancedSearch (Outlook)
Realiza una búsqueda basada en una cadena de búsqueda especificada de DAV Searching and Locating (DASL).
Sintaxis
expresión. AdvancedSearch
( _Scope_
, _Filter_
, _SearchSubFolders_
, _Tag_
)
expresión Variable que representa un objeto Application.
Parámetros
Nombre | Obligatorio/opcional | Tipo de datos | Descripción |
---|---|---|---|
Scope | Obligatorio | String | Ámbito de la búsqueda. Por ejemplo, la ruta de acceso de una carpeta. Se recomienda que la ruta de acceso de la carpeta esté entre comillas simples. En caso contrario, es posible que la búsqueda no devuelva resultados correctos si la ruta de acceso de la carpeta contiene caracteres especiales, incluidos los caracteres Unicode. Para especificar varias rutas de acceso de carpeta, escriba cada una entre comillas sencillas y separe con una coma las que estén escritas entre comillas sencillas. |
Filter | Opcional | Variant | Filtro de búsqueda DASL que define los parámetros de la búsqueda. |
SearchSubFolders | Opcional | Variant | Determina si la búsqueda incluirá cualquier subcarpeta de la carpeta. |
Tag | Opcional | Variant | Nombre especificado como identificador de la búsqueda. |
Valor devuelto
Objeto Search que representa los resultados de la búsqueda.
Comentarios
Puede ejecutar varias búsquedas simultáneamente llamando el método AdvancedSearch en líneas sucesivas de código. Sin embargo, debe tener en cuenta que mediante programación creando un gran número de carpetas de búsqueda puede producir actividad importante búsqueda simultáneas que podría afectar al rendimiento de Outlook, especialmente si Outlook lleva a cabo la búsqueda en el modo de intercambio en línea.
El método AdvancedSearch y las características relacionadas del modelo de objetos de Outlook no crean una carpeta de búsqueda que aparecerá en la interfaz de usuario de Outlook. Sin embargo, puede usar el método Save del objeto Search que se devuelve para crear una carpeta de búsqueda que aparecerá en la lista de carpetas de búsqueda en la interfaz de usuario de Outlook.
Con el parámetro Scope , puede especificar una o varias carpetas en el mismo almacén, pero no puede especificar varias carpetas en varios almacenes. Para especificar varias carpetas en el mismo almacén para el parámetro Scope, use un carácter de coma entre cada ruta de acceso de carpeta y encerrarlo entre cada ruta de acceso de carpeta comillas sencillas. Para carpetas predeterminadas, como la Bandeja de entrada o elementos enviados, puede utilizar el nombre de carpeta simple en lugar de la ruta de acceso completa a la carpeta. Por ejemplo, las dos líneas de código siguientes representan parámetros válido Scope:
Scope = "'Inbox', 'Sent Items'"
Scope = "'" & Application.Session.GetDefaultFolder(olFolderInbox).FolderPath _
& "','" & Application.Session.GetDefaultFolder(olFolderSentMail).FolderPath & "'"
El parámetro Filter puede ser cualquier consulta DASL válida. Para obtener información adicional sobre las consultas DASL, vea Filtrado de elementos y Referencia de propiedades por espacio de nombres. Tenga en cuenta que no puede usar una consulta JET para el parámetro Filter de Búsqueda avanzada. Si la búsqueda instantánea está habilitada en un almacén que contiene una carpeta especificada en el parámetro Scope, puede usar palabras clave de búsqueda instantánea para mejorar el rendimiento de la búsqueda. Si utiliza palabras clave de búsqueda instantánea y búsqueda instantánea no está habilitada, Outlook devolverá que un error y la búsqueda se producirá un error.
Ejemplo:
El siguiente ejemplo de Visual Basic para Aplicaciones (VBA) busca en la Bandeja de entrada elementos con el asunto igual a Prueba y muestra los nombres de los remitentes de los elementos de correo electrónico devueltos por la búsqueda. El procedimiento de evento AdvancedSearchComplete establece el booleano blnSearchComp
en True cuando finaliza la búsqueda. Esta variable booleana es utilizada por el procedimiento TestAdvancedSearchComplete()
para determinar cuándo finaliza la búsqueda. El código de ejemplo debe colocarse en un módulo de clase como ThisOutlookSession
, y se debe llamar al TestAdvancedSearchComplete()
procedimiento antes de que Outlook pueda llamar al procedimiento de evento.
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
El siguiente ejemplo de Microsoft Visual Basic para aplicaciones se usa el método AdvancedSearch para crear una nueva búsqueda. Los parámetros de la búsqueda, tal como se especifica en el argumento Filter del método AdvancedSearch , devolverán todos los elementos de las carpetas Bandeja de entrada y Elementos enviados donde la frase subject coincide o contiene "Office". Las carpetas Bandeja de entrada y elementos enviados del usuario se especifican como el ámbito de la búsqueda y la propiedad SearchSubFolders se establece en True. Una vez completada la búsqueda, se llama al método GetTable en el objeto Search para la enumeración de resultados de búsqueda.
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
Vea también
Soporte técnico y comentarios
¿Tiene preguntas o comentarios sobre VBA para Office o esta documentación? Vea Soporte técnico y comentarios sobre VBA para Office para obtener ayuda sobre las formas en las que puede recibir soporte técnico y enviar comentarios.