20/06/2015VBA Excel Realizando Consultas em um controle ListBox VBA ‐ Excel ‐ Realizando Consultas em um controle ListBox Neste artigo vamos abordar o controle ListBox do VBA que pode ser usado para exibir uma lista de itens sendo muito útil para aplicações VBA. A finalidade do VBA é automatizar os recursos que você utiliza diariamente em suas aplicações Office. O Visual Basic for Applications (VBA) é uma implementação do Visual Basic da Microsoft incorporada em todos os programas do Microsoft Office, bem como em outras aplicações da Microsoft, como o Visio, e que foi também incorporada pelo menos parcialmente em outros programas de terceiros como o AutoCAD, Mathcad e WordPerfect. Ele substitui e estende as capacidades de anteriormente existentes linguagens de programação de macros específicas para as aplicações e pode ser usado para controlar a quase totalidade dos aspectos da aplicação anfitriã, incluindo a manipulação de aspectos do interface do usuário tais como menus e barra das ferramentas e o trabalho com formulários desenhados pelo usuário ou com caixas de diálogo. http://pt.wikipedia.org/wiki/Visual_Basic_for_Applications Eu estou usando o Microsoft Office Excel 2007 e sistema operacional Windows 7, e portanto o código deste artigo foi testado somente nesta versão e ambiente. Antes de prosseguir eu sugiro que você leia os seguintes artigos da seção VBA do site Macoratti .net VBA ‐ Preparando o ambiente para desenvolvimento com o Excel Pílula de VBA ‐ Tipos de Aplicação (VBA‐Excel) VBA ‐ Criando um projeto no Excel Carregando uma ListBox com dados de uma planilha Excel e realizando consultas Abra o Microsoft Excel 2007, e clique no ícone para abrir o menu de opções. Selecione a opção Salvar ou Salvar Como; Na janela Salvar Como, informe o nome do projeto : Excel_ListBox_Consulta e altere a opção Tipo para : Pasta de Trabalho Habilitada para Macro do Excel e clique em Salvar: http://www.macoratti.net/13/10/vba_xlsqry.htm 1/10 20/06/2015 VBA Excel Realizando Consultas em um controle ListBox Este procedimento irá criar uma nova pasta de trabalho (Workbook) em branco contendo três planilhas. Usando a planilha Plan1 informe alguns dados nesta planilha conforme mostra a figura abaixo.macoratti.net/13/10/vba_xlsqry. http://www. A seguir pressione ALT+F11 para abrir o Editor Visual Basic (VBE). Neste projeto nosso objetivo será preencher um controle ListBox em uma aplicação VBA com os dados desta planilha e depois realizar consultas no controle ListBox.htm 2/10 . Vamos incluir no projeto VBA um formulário ou UserForm. Assim usando os dois botões você pode navegar no VBE para o Excel e.macoratti. vice‐versa. http://www. clique no menu Inserir ‐> UserForm.20/06/2015 VBA Excel Realizando Consultas em um controle ListBox Do VBE você pode ir para o Excel clicando no botão Excel no topo/esquerdo de sua tela . para isso.net/13/10/vba_xlsqry.htm 3/10 . Nota: Você também pode abrir o Editor Visual Basic clicando no menu Desenvolvedor e a seguir no ícone Visual Basic. Caption = Restaurar Dados Obs: Eu estou usando os nomes padrões dos controles neste exemplo por pura preguiça de alterar a propriedade name. Ex: lbDados. Vamos selecionar os seguintes controles arrastando cada um e soltando no UserForm1 : Label ‐ name=Label1 TextBox ‐ name=TextBox1 CommandButton ‐ name=CommandButton1. As macros podem automatizar quase tudo que seja possível executar no programa que você está usando e até http://www.20/06/2015 VBA Excel Realizando Consultas em um controle ListBox Podemos agora a partir da Caixa de Ferramentas selecionar controles e arrastar e soltar no formulário.macoratti.net/13/10/vba_xlsqry. etc. Então primeiro temos que criar a macro. O correto em um projeto real é sempre dar nomes significativos aos controles.htm 4/10 . cmdPreencher. Caption = Pesquisar ListBox ‐ name = ListBox1 CommandButton ‐ name=CommandButton2. Vamos dispor os controles conforme o leiaute abaixo usando o mouse para dimensionar os controles do tamanho desejado. Este formulário será aberto a partir do controle de formulário Botão que iremos incluir no Excel através da ação de uma macro que iremos atribuir ao botão. Definindo Macros O que é uma macro? Uma macro é uma coleção de comandos que você pode aplicar com um único clique. Altere também as seguintes propriedades do UserForm diretamente na janela de propriedades: BackColor = &H00C0E0FF& Caption = Pesquisa por Nome Quando o formulário UserForm1 for aberto ele deve ser preenchido automaticamente com os dados da planilha Excel. Vamos escrever uma macro que será usada para abrir o formulário UserForm1.ListBox1.End(xlUp).ListBox1.List(UserForm1.List(UserForm1.AddItem Plan1.macoratti.ListBox1. 2‐ percorre da segunda linha até a última linha e atribui o valor da primeira e segunda coluna For linha = 2 To ultimaLinha UserForm1. No nosso exemplo.Range("B" & linha) http://www.Range("A90").Range("A" & linha) UserForm1. Digite o código abaixo para criar a macro preencherListBox no módulo: Sub preencherListBox() Dim ultimaLinha As Long Dim linha As Integer 'retorna ao valor ultima linha preenchida ultimaLinha = Plan1.Range("B" & linha) Next End Sub Vamos entender o código: 1‐ ultimaLinha = Plan1. você pode criar uma macro gravando uma série de ações ou escrevendo a macro.Range("A90"). mas para usá‐las.htm 5/10 .AddItem Plan1. 1) = Plan1.20/06/2015 VBA Excel Realizando Consultas em um controle ListBox mesmo permitem fazer coisas que talvez você não soubesse que fossem possíveis.Show End Sub Este código usa o método Show que exibe um objeto UserForm.ListBox1.Row 'percorre da segunda linha até a última linha e atribui o valor da primeira e segunda coluna For linha = 2 To ultimaLinha UserForm1. como nossa planilha possui somente 7 linhas será retornado o valor 7 para a variável ultimaLinha. As macros são programação.Row Este código obtém última linha preenchida pesquisando até a célula A90. Vamos aproveitar e criar outra macro no mesmo módulo.ListCount ‐ 1. A maioria das macros que você pode criar nos programas do Office é escrita em uma linguagem chamada Microsoft Visual Basic for Applications. Criamos assim o código em uma Macro pois vamos abrir o formulário UserForm1 a partir da planilha Excel. Aqui eu poderia repetir o código mostrado no artigo ‐ VBA ‐ Excel ‐ Usando o controle ListBox mas vou mostrar outra maneira de preencher um controle ListBox. Para isso vamos incluir um Módulo em nosso projeto a partir do menu Inserir ‐> Módulo.net/13/10/vba_xlsqry.ListBox1. você não precisa ser um desenvolvedor e nem mesmo ter conhecimento de programação.ListBox1. 1) = Plan1. Em muitos programas do Office.Range("A" & linha) UserForm1.End(xlUp). ou VBA. Após essa operação digite o código abaixo no módulo inserido: Sub chamarFormulario() UserForm1. Essa macro será responsável por preencher o ListBox com os dados das planilha Excel.ListCount ‐ 1. coluna ) [= Variante] Assim obtemos os valores das células da coluna B e atribuímos à segunda coluna do ListBox. A seguir usamos a propriedade List que retorna ou define as entradas de lista de um ListBox. Com isso atribuímos a macro ChamarFormulario criada ao botão de comando da planilha: A seguir selecione o botão e altere o nome de Botão 4 para Pesquisar no ListBox. Fazendo isso de imediato será aberta a janela atribuir macro.20/06/2015 VBA Excel Realizando Consultas em um controle ListBox Next Este código percorre a planilha a partir da segunda linha e obtém o valor de cada célula da coluna incluindo no ListBox.macoratti. http://www. A sintaxe para List é : objeto.net/13/10/vba_xlsqry.List( linha. exibindo as duas macros que criamos no Módulo.htm 6/10 . Agora que já criamos as nossas duas macros vamos usá‐las. Selecione a macro ChamarFormulario e clique em OK. Retorne à planilha Excel e ativando a guia do desenvolvedor vamos incluir um controle de formulário Botão clicando na opção Inserir e selecionando o controle Botão: Após selecionar o Botão coloque‐o na planilha Excel. Primeiro vamos abrir o formulário UserForm1 a partir da planilha Excel. macoratti.20/06/2015 VBA Excel Realizando Consultas em um controle ListBox Agora pressione ALT+F11 para retornar ao Editor Visual Basic (VBE).net/13/10/vba_xlsqry. O evento Initialize ocorre depois que UserForm é carregado mas antes dele ser exibido. Vamos usar o evento Initialize do formulário UserForm1 para chamar a segunda macro que criamos de forma que o formulário seja preenchido com os dados da planilha Excel. Selecione o objeto UserForm e o evento Initialize e digite o código abaixo: Neste código chama a macro preencherListBox que criamos no módulo. Pronto ! Alternando para a planilha Excel e clicando no botão Pesquisar no ListBox teremos o formulário carregado e o listbox preenchido: http://www. Clique no menu Exibir‐>Codigo para visualizar o código do formulário.htm 7/10 . 20/06/2015 VBA Excel Realizando Consultas em um controle ListBox Agora vamos usar o evento Click do controle CommandButton para que quando o usuário clicar no Pesquisar seja feita uma pesquisa no Listbox e o valor encontrado seja exibido.Value Then 'limpa o listbox ListBox1. 0). Então começando com o botão de Pesquisa clique duas vezes sobre o controle CommandButton1 e digite o código abaixo no evento Click: Private Sub CommandButton1_Click() 'seleciona a primeira celula da planilha Range("A1").Select 'poe o foco no TextBox1 TextBox1.net/13/10/vba_xlsqry.Value = TextBox1.Offset(1. No evento Click do botão Restaurar Dados vamos apenas chamar a macro preencherListBox para preencher novamente o Listbox.Text And contador < 20 ActiveCell.htm 8/10 .Row 'inclui o valor da linha atual no listbox http://www.Select contador = contador + 1 Loop End If 'compara os valores da célula com o informado e se for igual If ActiveCell.Text <> "" Then 'atribui o valor zero ao contador contador = 0 'inicia um laço While verificando se o valor da célula é diferente do 'TextBox1 e se o contador é menor que 20.Clear 'atribuir o valor da célula ativa à linhaAtual linhaAtual = ActiveCell.SetFocus 'define duas variáveis 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. Enquanto isso for verdade o 'laço irá ser executado Do While ActiveCell.macoratti.Value <> TextBox1. net/13/10/vba_xlsqry. Vamos informar um nome e realizar a consulta clicando em Pesquisar. http://www.AddItem Plan1.20/06/2015 VBA Excel Realizando Consultas em um controle ListBox ListBox1.SetFocus End If End Sub O código esta comentado e localiza no ListBox um valor informado comparando‐o com o valor da célula da planilha.List(ListBox1.Text = "" 'atribui o foco ao textbox TextBox1. Agora vamos digitar o código do botão de comando Restaurar Dados.macoratti. Vimos assim mais algumas propriedades do controle ListBox e do VBA Excel para realizar consultas no ListBox.SetFocus 'chama a macro preencherListBox Call preencherListBox End Sub O código também esta comentado mas basicamente limpa o listbox e preenche novamente o controle com os dados da planilha. Veja abaixo o resultado: Clicando no botão Restaurar Dados o ListBox será novamente preenchido. "Erro" TextBox1. Agora vamos retornar à planilha Excel e clicar no botão Pesquisar no ListBox. Clique duas vezes sobre o controle CommandButton2 e digite o código abaixo no evento Click: Private Sub CommandButton2_Click() 'limpa o listbox ListBox1. vbCritical.Range("A" & linhaAtual) ListBox1.ListCount ‐ 1. 1) = Plan1. Aguarde novos artigos sobre os controles VBA.Range("B" & linhaAtual) Else 'o registro não foi encontrado MsgBox "Registro não encontrado". O formulário será aberto e preenchido.Clear 'limpa o textbox TextBox1.htm 9/10 . net VBA ‐ Criando um formulário de Login (revisitado) VBA ‐ Procurando informações na Planilha (Método Find) VBA ‐ Cadastro de Clientes com envio de Email no Excel Excel ‐ Como selecionar células/intervalos José Carlos Macoratti http://www.NET do Site Macoratti. quem de mim se alimenta. que vive. ASP .net Super DVD .NET ‐ A sua porta de entrada na plataforma . me enviou. também viverá por mim.NET. e eu vivo pelo Pai. João 6:57 Assim como o Pai.net Seção VBA do site Macoratti .net/13/10/vba_xlsqry.net Seção Visual Basic do site Macoratti . assim. João 6:56 Quem come a minha carne e bebe o meu sangue permanece em mim e eu nele. Referências: Seção VB . e o meu sangue verdadeiramente é bebida.macoratti.NET Super DVD Vídeo Aulas ‐ Vídeo Aula sobre VB .20/06/2015 VBA Excel Realizando Consultas em um controle ListBox Pegue a planilha aqui : Excel_ListBox_Consulta.htm 10/10 .zip João 6:55 Porque a minha carne verdadeiramente é comida.NET e C# Seção C# do site Macoratti.
Report "VBA - Excel - Realizando Consultas Em Um Controle ListBox"