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
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.