Formulário de Pesquisa com VBA

O artigo de hoje faz parte da série de artigos Aprendendo VBA, e te ensinará a criar um Formulário de Pesquisa com VBA.

Você aprenderá como Criar um Formulário de Pesquisa com o VBA a partir do Zero, mesmo se você não tiver muito conhecimento em VBA se você seguir o passo a passo e assistir a vídeo aula você conseguirá com certeza fazer o seu formulário também.

Muitas vezes temos a necessidade de ter um mecanismo de busca de informações e exibições destas informações em nossos sistemas desenvolvidos em Excel e VBA, para isso o artigo abaixo te dá o passo a passo do que você precisará para conseguir construir o seu formulário de pesquisa.

Vídeo Aula Completa!!!

Caso você precise de mais detalhes segue o passo a passo abaixo:

Este projeto é dividido em algumas etapas para facilitar a compreensão e realização da construção passo a passo.

Etapas do Projeto:

  1. Base de Dados
  2. Montagem do Layout do Formulário e interação com os componentes
  3. Criação do Algoritimo de Pesquisa e Exibição dos dados.
  4. Revisão e Testes.

1 – Base de Dados – Formulário de Pesquisa

Para que o seu projeto funcione você precisará ter uma base de dados, nesta base de dados que o mecanismo de busca irá atuar, podemos chamar de base de dados uma Sheet/Aba de cadastros de clientes com campos como Nome, Estado, Cidade entre outros…

A imagem abaixo tem como exemplo uma base de dados com os campos, CIDADE, ESTADO, NOME DO CLIENTE.

Base de Dados - Formulário de Pesquisa com VBA

2 – Montagem do Layout do Formulário

Para a montagem do Formulário de Pesquisa utilizaremos, um Formulário (UserForm), 3 caixas de texto (textbox), 3 Rótulos(Labels), 2 Botões de Comando (Command  Buttons), 1 Listview.

Sabendo quais são os componentes que vamos utilizar vamos montar o nosso Layout conforme a imagem abaixo…

Perspectivava Final do Formulário:

Formulário de Pesquisa - Layout


Ambiente de Programação do VBA: ALT  +F11.

Para que você consiga montar seu formulário de pesquisa você deverá acessar o ambiente do VBA, através do menu Desenvolvedor ou com as teclas de atalho: ALT +F11.

Já no ambiente de programação do VBA você terá acesso a uma tela semelhante a que é exibida abaixo:

Formulário de Pesquisa VBA

Inserindo um Formulário

Após ter acesso ao console do Visual Basic For Applications na tela acima você deverá criar o seu formulário conforme a imagem abaixo mostra:

  1. Menu – Inserir / Insert
  2. Formulário / UserForm
  3. Onde será exibido o seu formulário e todos os componentes

Após realizar a etapa de inserir o formulário você visualizará uma imagem semelhante a abaixo, com um formulário em branco sem campos e sem funcionalidades programadas.

  1. Formulário em branco onde devem ser inseridos os componentes
  2. Caixa de Ferramentas, nela que selecionaremos os componentes do formulário.
  3. Janela de Propriedades, nela trocamos os nomes e todas propriedades dos componentes.

Montagem do Formulário: Layout

Para a montagem do Formulário de Pesquisa utilizaremos, um Formulário (UserForm), 3 caixas de texto (textbox), 3 Rótulos(Labels), 2 Botões de Comando (Command  Buttons), 1 Listview.

Sabendo quais são os componentes que vamos utilizar vamos montar o nosso Layout conforme a imagem abaixo:

  1. Caixas de Texto / TextBox = Recebem os valores para realizar a pesquisa
  2. Rótulos / Labels = São os títulos que ficam sobre os campos
  3. Botões de Comando / Command Buttons = Botões que realizarão ações
  4. Listview = Exibirá os resultados da busca dentro do Formulário
  5. Janela de Propriedades onde iremos renomear os campos conforme abaixo.

Dando nomes para os componentes do Formulário

Na montagem do Layout é necessário dar nomes aos componentes que colocamos nos formulário, isso facilita na hora que precisamos identificar cada componente e também quando vamos atribuir ou capturar o valor de cada campo ou componente do nosso formulário.

Para os componentes do nosso formulário vamos dar os seguintes nomes, alterando a propriedade NAME na janela de propriedades:

txt_nome =  Campo que receberá o NOME do cliente para a pesquisa.
txt_cidade =  Campo que receberá o CIDADE do cliente para a pesquisa.
txt_estado =  Campo que receberá o ESTADO do cliente para a pesquisa.
bt_limpar = Botão com a função de resetar a pesquisa e retonar os valores originais.
bt_pesquisa = Botão que executa o código de filtragem no formulário.
Listview1 = Componente que recebe os valores da busca.

Criação do Algoritimo de Pesquisa e Exibição dos dados.

Com os campos renomeados é hora de colocarmos a mão na massa e partirmos para a programação do código que faz a filtragem dos campos e ações de busca.

Mas antes disse é importante se certificar que a sua base de dados está com filtros, se ela não estiver selecione os campos que deseja filtrar e aperte CRTL + SHIFT + L que o filtro será habilitado, após isso siga para os passos abaixo:

Carregamento das informações ao iniciar o formulário:

Private Sub UserForm_Initialize()

    With ListView1
    
        .BorderStyle = ccFixedSingle
        .Gridlines = True
        .View = lvwReport
        .FullRowSelect = True
        .ColumnHeaders.Add Text:="Cidade.", Width:=100
        .ColumnHeaders.Add Text:="Estado", Width:=50, Alignment:=2
        .ColumnHeaders.Add Text:="Nome", Width:=80, Alignment:=2
       
    End With

ListView1.ListItems.Clear

'Adiciona os dados a listview2

Sheets("Plan1").Select
 lin = 2
        
        Do Until Sheets("Plan1").Cells(lin, 1) = ""
                        
        Set li = ListView1.ListItems.Add(Text:=Sheets("Plan1").Cells(lin, 1).Value)
        li.ListSubItems.Add Text:=Sheets("Plan1").Cells(lin, 2).Value
        li.ListSubItems.Add Text:=Sheets("Plan1").Cells(lin, 3).Value
        lin = lin + 1
    
    Loop
    
    lbl_registros = Me.ListView1.ListItems.Count
    
End Sub

No Formulário clique no seu botão “BUSCAR” 2x e insira o código abaixo:

Private Sub bt_pesquisa_Click()

'Variáveis recebendo o valor dos campos
estado = Me.txt_estado.Value
nome = Me.txt_nome.Value
cidade = Me.txt_cidade.Value

'Mecanismo de filtragem
ActiveSheet.Range("$A$1:$C$12").AutoFilter Field:=1, Criteria1:="=*" & cidade & "*"
ActiveSheet.Range("$A$1:$C$12").AutoFilter Field:=2, Criteria1:="=*" & estado & "*"
ActiveSheet.Range("$A$1:$C$12").AutoFilter Field:=3, Criteria1:="=*" & nome & "*"

'Limpando os dados da Listview antes de exibir a filtragem
ListView1.ListItems.Clear

'Adiciona os dados a listview
Sheets("Plan1").Select
 lin = 2
        
        Do Until Sheets("Plan1").Cells(lin, 1) = ""
                        
        If Cells(lin, 1).Rows.Hidden = False Then
                        
Set li = ListView1.ListItems.Add(Text:=Sheets("Plan1").Cells(lin, 1).Value) 'Cod
             li.ListSubItems.Add Text:=Sheets("Plan1").Cells(lin, 2).Value 'Nome
             li.ListSubItems.Add Text:=Sheets("Plan1").Cells(lin, 3).Value 'Canal
        End If
        
        lin = lin + 1
    
    Loop

End Sub

No Formulário clique no seu botão “LIMPAR” 2x e insira o código abaixo:

Private Sub bt_limpar_Click()

'Desabilita o filtro da base de dados
ActiveSheet.ShowAllData

'Limpa os dados da Listview
ListView1.ListItems.Clear

'Adiciona os dados a listview2
Sheets("Plan1").Select
 lin = 2
        
        Do Until Sheets("Plan1").Cells(lin, 1) = ""
                        
        If Cells(lin, 1).Rows.Hidden = False Then
                        
Set li = ListView1.ListItems.Add(Text:=Sheets("Plan1").Cells(lin, 1).Value) 'Cod
             li.ListSubItems.Add Text:=Sheets("Plan1").Cells(lin, 2).Value 'Nome
             li.ListSubItems.Add Text:=Sheets("Plan1").Cells(lin, 3).Value 'Canal
        End If
        
        lin = lin + 1
    
    Loop
    
    lbl_registros = Me.ListView1.ListItems.Count
    
End Sub

Esta é apenas uma forma de realizar uma busca com formulários no Excel.

Caso você tenha interesse em aprender como CRIAR UM FORMULÁRIO DE CADASTRO acesse o link abaixo:
http://douglasgodoy.com.br/vba-aprenda-criar-formulario-de-cadastro/

Espero que você tenha aprendido coisas novas nesta aula e saia com ainda mais conhecimento.

Se você ainda tiver dúvidas me escreva e se inscreva no canal para receber as aulas novas.

Ah, e se você quiser a planilha, se inscreva no canal e comenta lá no video com seu email que te envio.

Um abraço!

Douglas Godoy

Comentários