Método Application.AdvancedSearch (Outlook)

Realiza uma pesquisa com base em uma sequência de pesquisa do DAV Searching and Locating (DASL) especificada.

Sintaxe

expression. AdvancedSearch( _Scope_ , _Filter_ , _SearchSubFolders_ , _Tag_ )

expressão Uma variável que representa um Aplicativo objeto.

Parâmetros

Nome Obrigatório/Opcional Tipo de dados Descrição
Escopo Obrigatório String O escopo da pesquisa. Por exemplo, o caminho de pasta de uma pasta. É recomendável que o caminho da pasta esteja entre aspas individuais. Caso contrário, talvez a pesquisa não retorne resultados corretos se o caminho da pasta contiver caracteres especiais (como caracteres Unicode, por exemplo). Para especificar vários caminhos de pasta, coloque cada caminho de pasta entre aspas simples e separe os caminhos de pasta com aspas simples com vírgula.
Filter Opcional Variant O filtro de pesquisa DASL que define os parâmetros da pesquisa.
SearchSubFolders Opcional Variant Determina se a pesquisa será feita também em subpastas da pasta.
Tag Opcional Variant O nome dado como identificador para a pesquisa.

Valor de retorno

Um objeto Search que representa os resultados da pesquisa.

Comentários

Você pode executar várias pesquisas simultaneamente chamando o método AdvancedSearch em linhas sucessivas de código. No entanto, você deve estar ciente de que criar programaticamente um grande número de pastas de pesquisa pode resultar em atividade significativa pesquisa simultâneas que seria afetam o desempenho do Outlook, especialmente se o Outlook conduz a pesquisa no modo online do Exchange.

O método AdvancedSearch e os recursos relacionados no modelo de objeto do Outlook não criam uma Pasta de Pesquisa que será exibida na interface do usuário do Outlook. No entanto, você pode usar o método Save do objeto Search que é retornado para criar uma pasta de pesquisa que irá aparecer na lista de pastas de pesquisa na interface de usuário do Outlook.

Usando o parâmetro Escopo , você pode especificar uma ou mais pastas no mesmo repositório, mas talvez não especifique várias pastas em vários repositórios. Para especificar várias pastas no mesmo repositório para o parâmetro Scope, use um caractere de vírgula entre cada caminho de pasta e coloque cada caminho de pasta entre aspas simples. Para pastas padrão, como caixa de entrada ou itens enviados, você pode usar o nome da pasta simples em vez do caminho de pasta completa. Por exemplo, as duas linhas de código a seguintes representam válido Scope parâmetros:

Scope = "'Inbox', 'Sent Items'"
Scope = "'" & Application.Session.GetDefaultFolder(olFolderInbox).FolderPath _  
    & "','" & Application.Session.GetDefaultFolder(olFolderSentMail).FolderPath & "'"

O parâmetro Filter pode ser qualquer consulta DASL válida. Para obter informações adicionais sobre consultas DASL, consulte Filtrando itens e referenciando propriedades por namespace. Observe que você não pode usar uma consulta JET para o parâmetro Filtro da Pesquisa Avançada. Se a pesquisa instantânea está habilitada em um repositório que contém uma pasta especificada no parâmetro Scope, você pode usar palavras-chave de pesquisa instantânea para melhorar o desempenho da sua pesquisa. Se você usar palavras-chave de pesquisa instantânea e pesquisa instantânea não está habilitada, o Outlook retornará que um erro e sua pesquisa falhará.

Exemplo

O exemplo de VBA (Visual Basic for Applications) a seguir pesquisa na caixa de entrada itens com assunto igual a Teste e exibe os nomes dos remetentes dos itens de email retornados pela pesquisa. O procedimento de evento AdvancedSearchComplete define o boolean blnSearchComp como True quando a pesquisa é concluída. Essa variável boolean é usada pelo procedimento TestAdvancedSearchComplete() para determinar quando a pesquisa é concluída. O código de exemplo deve ser colocado em um módulo de classe como ThisOutlookSession, e o TestAdvancedSearchComplete() procedimento deve ser chamado antes que o procedimento de evento possa ser chamado pelo 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

O seguinte Microsoft exemplo Visual Basic for Applications usa o método AdvancedSearch para criar uma nova pesquisa. Os parâmetros da pesquisa, conforme especificado pelo argumento Filter do método AdvancedSearch , retornarão todos os itens nas pastas Caixa de Entrada e Itens Enviados em que o Assunto corresponde ou contém "Office". Pastas de caixa de entrada e itens enviados do usuário são especificadas como o escopo da pesquisa e a propriedade SearchSubFolders é definida como True. Quando a pesquisa estiver concluída, o método GetTable é chamado no objeto de pesquisa para enumeração de alto desempenho dos resultados da pesquisa.

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

Confira também

Objeto de Aplicativo

Suporte e comentários

Tem dúvidas ou quer enviar comentários sobre o VBA para Office ou sobre esta documentação? Confira Suporte e comentários sobre o VBA para Office a fim de obter orientação sobre as maneiras pelas quais você pode receber suporte e fornecer comentários.