Documenti di Didattica
Documenti di Professioni
Documenti di Cultura
VBAExcelRealizandoConsultasemumcontroleListBox
Eu estou usando o Microsoft Office Excel 2007 e sistema operacional Windows 7, e portanto o
cdigo deste artigo foi testado somente nesta verso e ambiente.
Antes de prosseguir eu sugiro que voc leia os seguintes artigos da seo VBA do site Macoratti
.net
VBA Preparando o ambiente para desenvolvimento com o Excel
Plula de VBA Tipos de Aplicao (VBAExcel)
VBA Criando um projeto no Excel
http://www.macoratti.net/13/10/vba_xlsqry.htm
1/10
20/06/2015
VBAExcelRealizandoConsultasemumcontroleListBox
Este procedimento ir criaruma nova pasta de trabalho (Workbook) em branco contendo trs
planilhas.
Usando a planilha Plan1 informe alguns dados nesta planilha conforme mostra a figura abaixo.
Neste projeto nosso objetivo ser preencher um controle ListBox em uma aplicao VBA com os
dados desta planilha e depois realizar consultas no controle ListBox.
A seguir pressione ALT+F11 para abrir o Editor Visual Basic (VBE);
http://www.macoratti.net/13/10/vba_xlsqry.htm
2/10
20/06/2015
VBAExcelRealizandoConsultasemumcontroleListBox
Do VBE voc pode ir para o Excel clicando no boto Excel no topo/esquerdo de sua tela . Assim
usando os dois botes voc pode navegar no VBE para o Excel e, viceversa.
Nota: Voc tambm pode abrir o Editor Visual Basic clicando no menu Desenvolvedor e a seguir
no cone Visual Basic.
Vamos incluir no projeto VBA um formulrio ou UserForm, para isso, clique no menu Inserir >
UserForm;
http://www.macoratti.net/13/10/vba_xlsqry.htm
3/10
20/06/2015
VBAExcelRealizandoConsultasemumcontroleListBox
Quando o formulrio UserForm1 for aberto ele deve ser preenchido automaticamente com os dados
da planilha Excel.
Este formulrio ser aberto a partir do controle de formulrio Boto que iremos incluir no Excel
atravs da ao de uma macro que iremos atribuir ao boto. Ento primeiro temos que criar a
macro.
Definindo Macros
O que uma macro?
Uma macro uma coleo de comandos que voc pode aplicar com um nico clique. As macros
podem automatizar quase tudo que seja possvel executar no programa que voc est usando e at
http://www.macoratti.net/13/10/vba_xlsqry.htm
4/10
20/06/2015
VBAExcelRealizandoConsultasemumcontroleListBox
mesmo permitem fazer coisas que talvez voc no soubesse que fossem possveis.
As macros so programao, mas para uslas, voc no precisa ser um desenvolvedor e nem
mesmo ter conhecimento de programao. A maioria das macros que voc pode criar nos
programas do Office escrita em uma linguagem chamada Microsoft Visual Basic for Applications,
ou VBA.
Em muitos programas do Office, voc pode criar uma macro gravando uma srie de aes ou
escrevendo a macro. Vamos escrever uma macro que ser usada para abrir o formulrio
UserForm1.
Para isso vamos incluir um Mdulo em nosso projeto a partir do menu Inserir > Mdulo;
Aps essa operao digite o cdigo abaixo no mdulo inserido:
Sub
chamarFormulario()
UserForm1.Show
End Sub
Este cdigo usa o mtodo Show que exibe um objeto UserForm.
Criamos assim o cdigo em uma Macro pois vamos abrir o formulrio UserForm1 a partir da
planilha Excel.
Vamos aproveitar e criar outra macro no mesmo mdulo. Essa macro ser responsvel por
preencher o ListBox com os dados das planilha Excel. Aqui eu poderia repetir o cdigo mostrado no
artigo VBA Excel Usando o controle ListBox mas vou mostrar outra maneira de preencher um
controle ListBox.
Digite o cdigo abaixo para criar a macro preencherListBox no mdulo:
Sub preencherListBox()
Dim ultimaLinha As Long
Dim linha As Integer
'retorna ao valor ultima linha preenchida
ultimaLinha = Plan1.Range("A90").End(xlUp).Row
'percorre da segunda linha at a ltima linha e atribui o valor da primeira e segunda coluna
For linha = 2 To ultimaLinha
UserForm1.ListBox1.AddItem Plan1.Range("A" & linha)
UserForm1.ListBox1.List(UserForm1.ListBox1.ListCount 1, 1) = Plan1.Range("B" & linha)
Next
End Sub
Vamos entender o cdigo:
1 ultimaLinha = Plan1.Range("A90").End(xlUp).Row
Este cdigo obtm ltima linha preenchida pesquisando at a clula A90. No nosso exemplo, como
nossa planilha possui somente 7 linhas ser retornado o valor 7 para a varivel ultimaLinha.
2 percorre da segunda linha at a ltima linha e atribui o valor da primeira e segunda coluna
For linha = 2 To ultimaLinha
UserForm1.ListBox1.AddItem Plan1.Range("A" & linha)
UserForm1.ListBox1.List(UserForm1.ListBox1.ListCount 1, 1) = Plan1.Range("B" & linha)
http://www.macoratti.net/13/10/vba_xlsqry.htm
5/10
20/06/2015
VBAExcelRealizandoConsultasemumcontroleListBox
Next
Este cdigo percorre a planilha a partir da segunda linha e obtm o valor de cada clula da coluna
incluindo no ListBox.
A seguir usamos a propriedade List que retorna ou define as entradas de lista de um ListBox.
A sintaxe para List : objeto.List( linha, coluna ) [= Variante]
Assim obtemos os valores das clulas da coluna B e atribumos segunda coluna do ListBox.
Agora que j criamos as nossas duas macros vamos uslas. Primeiro vamos abrir o formulrio
UserForm1 a partir da planilha Excel.
Retorne planilha Excel e ativando a guia do desenvolvedor vamos incluir um controle de
formulrio Boto clicando na opo Inserir e selecionando o controle Boto:
Aps selecionar o Boto coloqueo na planilha Excel. Fazendo isso de imediato ser aberta a janela
atribuir macro, exibindo as duas macros que criamos no Mdulo.
Selecione a macro ChamarFormulario e clique em OK;
Com isso atribumos a macro ChamarFormulario criada ao boto de comando da planilha:
http://www.macoratti.net/13/10/vba_xlsqry.htm
6/10
20/06/2015
VBAExcelRealizandoConsultasemumcontroleListBox
http://www.macoratti.net/13/10/vba_xlsqry.htm
7/10
20/06/2015
VBAExcelRealizandoConsultasemumcontroleListBox
Agora vamos usar o evento Click do controle CommandButton para que quando o usurio clicar no
Pesquisar seja feita uma pesquisa no Listbox e o valor encontrado seja exibido.
No evento Click do boto Restaurar Dados vamos apenas chamar a macro preencherListBox para
preencher novamente o Listbox.
Ento comeando com o boto de Pesquisa clique duas vezes sobre o controle CommandButton1 e
digite o cdigo abaixo no evento Click:
Private Sub CommandButton1_Click()
'seleciona a primeira celula da planilha
Range("A1").Select
'poe o foco no TextBox1
TextBox1.SetFocus
'define duas variveis para tratar a linha atual e o contador
Dim linhaAtual As Integer
Dim contador As Integer
'verifica se o TextBox1 diferente (<>) de vazio
If TextBox1.Text <> "" Then
'atribui o valor zero ao contador
contador = 0
'inicia um lao While verificando se o valor da clula diferente do
'TextBox1 e se o contador menor que 20. Enquanto isso for verdade o
'lao ir ser executado
Do While ActiveCell.Value <> TextBox1.Text And contador < 20
ActiveCell.Offset(1, 0).Select
contador = contador + 1
Loop
End If
'compara os valores da clula com o informado e se for igual
If ActiveCell.Value = TextBox1.Value Then
'limpa o listbox
ListBox1.Clear
'atribuir o valor da clula ativa linhaAtual
linhaAtual = ActiveCell.Row
'inclui o valor da linha atual no listbox
http://www.macoratti.net/13/10/vba_xlsqry.htm
8/10
20/06/2015
VBAExcelRealizandoConsultasemumcontroleListBox
9/10
20/06/2015
VBAExcelRealizandoConsultasemumcontroleListBox
Excel_ListBox_Consulta.zip
http://www.macoratti.net/13/10/vba_xlsqry.htm
10/10