Compartir a través de


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

Objeto Application

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.