Oi pessoal. Hoje vamos criar uma pesquisa personalizada bem simples com base no comando Localizar do excel. Nessa pesquisa, os dados retornados serão exibidos num formulário.

Vamos começar então.

Tendo em mãos uma planilha simples:

Nome Estado Função Status
Marcelle Silva Rio de Janeiro Técnica Ativo
Cláudia Mara Goiás Técnica Ativo
Ricardo Teles Minas Gerais Supervisor Ativo
James Wood Rio de Janeiro Técnico Férias
Aline Aguiar Moraes Bahia Técnica Ativo
Cláudia Moraes Lima Rio Grande do Sul Gerente Executiva Ativo
Marcelo de Souza Rio de Janeiro Supervisor Aposentado
Maria Antonieta Bahia Secretária Férias
Jackie Wistern Bahia Técnico Ativo

Temos, assim, quatro colunas: nome, estado, função e status. Adicione um botão de comando nessa planilha, definindo seu caption como “Localizar na Planilha”. Dê um duplo clique nesse controle para abrir o evento Click no ambiente VBA e podermos editá-lo. Quando abrir, digite isso:

Private Sub CommandButton1_Click()

     frmBusca.Show False    'Exibe o Formulário da Pesquisa

End Sub

Bom, agora, adicione um formulário (Menu Inserir > UserForm) e dê o nome “frmBusca”.

Adicione a ele 5 TextBox, 8 Label, 1 CommandButton e 1 SpinButton. O formulário deve ficar parecido com este:

Defina os seguintes nomes aos controles:

  • CommandButton = btn_Procurar
  • SpinButton = SpinButton1
  • Label que vai mostrar a posição do registro atual = Label_Registros_Contador (Os demais Labels não precisa alterar os nomes)
  • Textbox onde vai digitar o termo da pesquisa = txt_Procurar (Os demais textbox deixe como TextBox1, TextBox2, TextBox3 e TextBox4)

 

Após ajustar o design do formulário, tecle F7 para exibir o seu código e declare as duas variáveis públicas abaixo:

Public MatrizResultados As Variant
Public Total_Ocorrencias As Long

 

Em seguida, crie a sub-rotina que executará a pesquisa no formulário:

Private Sub ProcuraPersonalizada(ByVal TermoPesquisado As String)
Dim Busca As Range
Dim Primeira_Ocorrencia As String
Dim Resultados As String

    'Executa a busca
    Set Busca = Plan1.Cells.Find(What:=TermoPesquisado, After:=Plan1.Range("A1"), LookIn:=xlFormulas, _
        LookAt:=xlPart, SearchOrder:=xlByRows, SearchDirection:=xlNext, _
        MatchCase:=False, SearchFormat:=False)

    'Caso tenha encontrado alguma ocorrência...
    If Not Busca Is Nothing Then

        Primeira_Ocorrencia = Busca.Address
        Resultados = Busca.Row  'Lista o primeiro resultado na variavel

        'Neste loop, pesquisa todas as próximas ocorrências para
        'o termo pesquisado
        Do
            Set Busca = Plan1.Cells.FindNext(After:=Busca)

            'Condicional para não listar o primeiro resultado
            'pois já foi listado acima
            If Not Busca.Address Like Primeira_Ocorrencia Then
                Resultados = Resultados & ";" & Busca.Row
            End If
        Loop Until Busca.Address Like Primeira_Ocorrencia

        MatrizResultados = Split(Resultados, ";")

        'Atualiza dados iniciais no formulário
        SpinButton1.Max = UBound(MatrizResultados)  'Valor maximo do seletor de registros

        'habilita o seletor de registro
        SpinButton1.Enabled = True

        'indicador do seletor de registros
        Label_Registros_Contador.Caption = "1 de " & UBound(MatrizResultados) + 1

        'Box com o conteudo encontrado
        TextBox1.Text = Plan1.Cells(MatrizResultados(0), 1).Value
        TextBox2.Text = Plan1.Cells(MatrizResultados(0), 2).Value
        TextBox3.Text = Plan1.Cells(MatrizResultados(0), 3).Value
        TextBox4.Text = Plan1.Cells(MatrizResultados(0), 4).Value

    Else    'Caso nada tenha sido encontrado, exibe mensagem informativa

        SpinButton1.Enabled = False     'desabilita o seletor de registros
        Label_Registros_Contador.Caption = ""   'zera os resultados encontrados
        'limpa os campos do formulário
        TextBox1.Text = ""
        TextBox2.Text = ""
        TextBox3.Text = ""
        TextBox4.Text = ""
        MsgBox "Nenhum resultado para '" & TermoPesquisado & "' foi encontrado."

    End If

End Sub

 

Feito isso, falta criar os procedimentos a serem executados ao abrir o formulário, ao clicar no botão pesquisar e ao clicar nos botões que percorrem os resultados obtidos. Segue abaixo esse códigos nesta ordem:

Private Sub UserForm_Initialize()

    SpinButton1.Enabled = False
    Label_Registros_Contador.Caption = ""

End Sub

Private Sub btn_Procurar_Click()

    If Me.txt_Procurar.Text = "" Then
        MsgBox "Digite um valor para a pesquisa"
    Else
        Call ProcuraPersonalizada(Me.txt_Procurar.Text)
    End If

End Sub

Private Sub SpinButton1_Change()
Dim Linha As Long
Dim TotalOcorrencias As Long

    TotalOcorrencias = SpinButton1.Max + 1
    Linha = MatrizResultados(SpinButton1.Value)

    Label_Registros_Contador.Caption = SpinButton1.Value + 1 & " de " & TotalOcorrencias
    TextBox1.Text = Plan1.Cells(Linha, 1).Value
    TextBox2.Text = Plan1.Cells(Linha, 2).Value
    TextBox3.Text = Plan1.Cells(Linha, 3).Value
    TextBox4.Text = Plan1.Cells(Linha, 4).Value

End Sub

Pronto. Após todos os códigos digitados, basta acessar a planilha, clicar no botão “Localizar na Planilha”, digitar o texto que deseja encontrar e será exibido nos campos do formulário todas as ocorrências obtidas na consulta.

O arquivo utilizado neste artigo está disponivel para download. O link está lá no final do post.

Veja também a continuação deste artigo, onde ensino como pesquisar em mais de uma planilha e como editar os dados da planilha através do formulário.

Um abraço a todos.

Termos aprendidos neste artigo:

Find Localiza informações específicas em um intervalo, e retorna um objeto Range representando a primeira célula onde essas informações se encontram. Retorna Nothingse nenhuma coincidência for encontrada. Não afeta a seleção da célula ativa.expressão.Find(What, After, LookIn, LookAt, SearchOrder, SearchDirection, MatchCase, MatchByte, SearchFormat)

expressão necessária. Uma expressão que retorna um objeto Range.

What Variant necessário. Os dados a serem procurados. Pode ser uma seqüência de caracteres ou qualquer tipo de dados do Microsoft Excel.

After Variant opcional. A célula depois da qual você deseja que a pesquisa comece. Corresponde à posição da célula ativa quando uma pesquisa é feita a partir da interface do usuário. Observe que After precisa ser uma única célula no intervalo. Lembre-se de que a pesquisa começa depois dessa célula; a célula especificada não é pesquisada até que o método dê a volta e chegue a ela. Se você não especificar esse argumento, a pesquisa começará após a célula do canto superior esquerdo do intervalo.

LookIn Variant opcional. O tipo de informação.

LookAt Variant opcional. Pode ser uma das seguintes constantes XlLookAt:  xlWhole ou xlPart.

SearchOrder Variant opcional. Pode ser uma das seguintes constantes XlSearchOrder:  xlByRows ou xlByColumns.

SearchDirection XlSearchDirection opcional. A direção da pesquisa.

MatchCase Variant opcional. True para fazer a pesquisa fazer distinção entre maiúsculas e minúsculas. O valor padrão é False.

MatchByte Variant opcional. Usado somente se você tiver selecionado ou instalado suporte de linguagem de byte duplo. True para que os caracteres de dois bytes coincidam somente com caracteres de dois bytes. False para que os caracteres de dois bytes coincidam com seus equivalentes de um byte.

SearchFormat Variant opcional. O formato da pesquisa

FindNext Continua uma pesquisa que tenha começado com o método Find. Localiza a próxima célula que coincida com as mesmas condições e retorna um objeto Rangerepresentando essa célula. Não afeta a seleção da célula ativa.expressão.FindNext(After)

Método FindNextexpressão necessária. Uma expressão que retorna um objeto Range.

After Variant opcional. A célula depois da qual você deseja procurar. Corresponde à posição da célula ativa quando uma pesquisa é feita a partir da interface do usuário. Observe que After precisa ser uma única célula no intervalo. Lembre-se de que a pesquisa começa depois desta célula; a célula especificada não é pesquisada até que o método dê a volta e chegue à ela. Se esse argumento não for especificado, a pesquisa começará após a célula do canto superior esquerdo do intervalo.

Show Exibe um objeto UserForm.Método Show

Sintaxe

[object.]Show modal

A sintaxe do método Show tem as seguintes partes:

object Opcional. Uma expressão de objeto que resulta em um objeto na lista Aplica-se a. Se object for omitido, o UserForm associado ao módulo UserForm ativo será assumido como object.
modal Opcional. Valor booleano que determina se o UserForm é em janela restrita ou sem janela restrita.

Antes de efetuar o download do arquivo de exemplo, convido você a socializar conosco.

Escolha uma das opções abaixo. Seguir no twitter, assinar nossa Newsletter...

Isso nos ajuda na divulgação do site e te permite ficar sempre atualizado das novidades. Fico muito grato pela sua colaboração.

Digite seu email:

Você receberá um email para ativar o cadastro, ok!