Compartir a través de


Buscar elementos cuyo asunto contenga “Office” en la Bandeja de entrada

En este tema se muestran dos ejemplos de código en los que se utilizan consultas DASL para buscar los elementos de la Bandeja de entrada que contienen "Office" en la línea de asunto. En el primer ejemplo de código se usa Folder.GetTable y en el segundo, Application.AdvancedSearch para aplicar la consulta DASL.

Cada uno de los ejemplos de código usa la palabra clave del indexador de contenido ci_phrasematch en un filtro DASL de la propiedad https://schemas.microsoft.com/mapi/proptag/0x0037001E (la propiedad Subject a la que hace referencia el espacio de nombres del identificador MAPI) para buscar la palabra "office" en el asunto. Se aplica el filtro a los elementos de la Bandeja de entrada (utilizando Folder.GetTable o Application.AdvancedSearch) y se imprime la línea de asunto de cada elemento devuelto por la búsqueda. Nota La coincidencia no distingue mayúsculas de minúsculas, por lo que los elementos que contengan "Office" u "office" en el asunto serán devueltos por Folder.GetTable o Application.AdvancedSearch. Observe que cada ejemplo imprime el asunto de cada fila de la tabla resultante. Elige usar el objeto Table de peso más ligero en lugar del objeto Search.Results para mejorar el rendimiento. La propiedad Subject se incluye en una Tabla devuelta por una búsqueda en una carpeta. Pero como cualquier carpeta de Outlook, la Bandeja de entrada puede contener varios elementos y no se limita a los elementos de correo. Si desea obtener acceso a una propiedad específica de un tipo de elemento determinado en la Bandeja de entrada, use Columns.Add para incluir esa propiedad y actualizar la tabla, y para cada fila devuelta en table, compruebe el tipo de mensaje del elemento antes de acceder a la propiedad. En este ejemplo de código se utiliza Folder.GetTable para realizar la búsqueda:

Sub RestrictTableForInbox() 
    Dim oT As Outlook.Table 
    Dim strFilter As String 
    Dim oRow As Outlook.Row 
     
    'Construct filter for Subject containing 'Office' 
    Const PropTag  As String = "https://schemas.microsoft.com/mapi/proptag/" 
    strFilter = "@SQL=" & Chr(34) & PropTag _ 
        & "0x0037001E" & Chr(34) & " ci_phrasematch 'Office'" 
     
    'Do search and obtain Table on Inbox 
    Set oT = Application.Session.GetDefaultFolder(olFolderInbox).GetTable(strFilter) 
     
    'Print Subject of each returned item 
    Do Until oT.EndOfTable 
        Set oRow = oT.GetNextRow 
        Debug.Print oRow("Subject") 
    Loop 
End Sub

En este ejemplo de código se utiliza Application.AdvancedSearch para realizar la búsqueda:

Public blnSearchComp As Boolean 
Private Sub Application_AdvancedSearchComplete(ByVal SearchObject As Search) 
    MsgBox "The AdvancedSearchComplete Event fired" 
    blnSearchComp = True 
End Sub 
 
Sub TestSearchWithTable() 
    Dim oSearch As Search 
    Dim oTable As Table 
    Dim strQuery As String 
    Dim oRow As Row 
         
    blnSearchComp = False 
     
    'Construct filter. 0x0037001E represents Subject 
    strQuery = _ 
        "https://schemas.microsoft.com/mapi/proptag/0x0037001E" & _ 
        " ci_phrasematch 'Office'" 
     
    'Do search 
    Set oSearch = _ 
        Application.AdvancedSearch("Inbox", strQuery, False, "Test") 
    While blnSearchComp = False 
        DoEvents 
    Wend 
 
    'Obtain Table 
    Set oTable = oSearch.GetTable 
     
    'Print Subject of each returned item 
    Do Until oTable.EndOfTable 
        Set oRow = oTable.GetNextRow 
        Debug.Print oRow("Subject") 
    Loop 
End Sub

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.