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 da 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. Fonte: http://pt.wikipedia.org/wiki/Visual_Basic_for_Applications
Eu estou usando o Microsoft Office Excel 2007 e o sistema operacional Windows 7, 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:
- 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
Abra o Microsoft Excel 2007 e clique no ícone para abrir o menu de opções. Selecione a opção Salvar ou Salvar Como e na janela Salvar Como, informe o nome do projeto: Excel_ListBox e altere a opção Tipo para Pasta de Trabalho Habilitada para Macro do Excel e clique em Salvar:
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:
Neste primeiro projeto, nosso objetivo será preencher um controle ListBox em uma aplicação VBA com os dados desta planilha.
A seguir, pressione ALT+F11 para abrir o Editor Visual Basic (VBE).
Do VBE você pode ir para o Excel clicando no botão Excel no topo esquerdo de sua tela. Assim, usando os dois botões você pode navegar no VBE para o Excel e vice-versa.
Nota: Você pode abrir o Editor Visual Basic clicando no menu Desenvolvedor e a seguir no ícone Visual Basic.
Vamos incluir no projeto VBA um formulário ou UserForm. Para isso, clique no menu Inserir -> UserForm:
Podemos agora, a partir da Caixa de Ferramentas, selecionar um controle e arrastar e soltar no formulário.
Vamos selecionar os controles ListBox(name=ListBox1) e CommandButton(name=CommandButton1, Caption=Preencher ListBox), um de cada vez, arrastando cada um e soltando no UserForm1.
Obs: Eu estou usando os nomes padrões dos controles neste exemplo por pura preguiça de alterar a propriedade name. O correto em um projeto real é sempre dar nomes significativos aos controles. Ex: lbDados, cmdPreencher, etc.
Vamos dispor os controles conforme o leiaute abaixo, usando o mouse para dimensionar os controles do tamanho desejado.
Vamos alterar as seguintes propriedades do UserForm diretamente da janela de propriedades:
- BackColor = &H00C0E0FF&
- Caption = Preenchendo o ListBox
Vamos usar o evento Click do controle CommandButton para que quando o usuário clique no botão, o ListBox seja preenchido. Para isso clique duas vezes sobre o controle CommandButton e digite o código abaixo no evento Click:
Private Sub CommandButton1_Click() ListBox1.ColumnCount = 3 ListBox1.RowSource = "Plan1!A1:C14" ListBox1.Font.Size = 10 ListBox1.Font.Name = "Verdana" End Sub
Vamos entender o código:
ListBox1.ColumnCount = 3
A propriedade ColumnCount especifica o número de colunas a exibir em uma caixa de listagem ou caixa de combinação.
Este código atribui o valor 3 à propriedade ColumnCount do controle ListBox1. Isso define que vamos exibir três colunas, pois vamos obter os dados da planilha que possui três colunas.
ListBox1.RowSource = “Plan1!A1:C14”
A propriedade RowSource especifica a origem que fornece uma lista para um ComboBox ou ListBox. Estamos definindo a origem dos dados como sendo a planilha Plan1 da célula A1 até a célula C14. (“Plan1!A1:C14”).
ListBox1.Font.Size = 10
ListBox1.Font.Name = “Verdana”
As propriedades Font.Size e Font.Name definem o tamanho e a fonte usadas pelo controle ListBox1.
Tratando erros
Podemos incluir um tratamento de erro em nosso código para evitar surpresas. Para fazer isso podemos usar a instrução On Error.
Se você não usar uma instrução On Error, qualquer erro em tempo de execução que ocorrer será fatal, isto é, será exibida uma mensagem de erro e a execução para.
A instrução On Error ativa uma rotina de tratamento de erro e especifica o local da rotina dentro de um procedimento; pode ser usada também para desativar uma rotina de tratamento de erro.
Vamos alterar o código usado no evento Click incluindo a instrução On Error GoTo TrataErro:
Private Sub CommandButton1_Click() On Error GoTo TrataErro ListBox1.ColumnCount = 3 ListBox1.RowSource = "Plan1!A1:C14" ListBox1.Font.Size = 10 ListBox1.Font.Name = "Verdana" Exit Sub TrataErro: MsgBox "Erro " & Err.Description, vbCritical, "Erro" End Sub
Note que definimos uma Label TrataErro onde usamos a função MsgBox para exibir a descrição do objeto Err (Erro): Err.Description.
Não esqueça de sempre definir uma instrução Exit Sub antes da definição da Label para tratar o erro para sair do bloco de código sem executar o tratamento de erro.
Agora qualquer erro será capturado e exibido em tempo de execução.
Definindo uma Macro
O que é uma macro?
Uma macro é uma coleção de comandos que você pode aplicar com um único clique. As macros podem automatizar quase tudo que seja possível executar no programa que você está usando e até mesmo permitem fazer coisas que talvez você não soubesse que fossem possíveis.
As macros são programação, mas para usá-las, você não precisa ser um desenvolvedor e nem mesmo ter conhecimento de programação. 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 série de ações ou escrevendo a macro. Vamos escrever uma macro que será usada para abrir o formulárioUserForm1.
Para isso vamos incluir um módulo em nosso projeto a partir do menu Inserir -> Módulo;
Após essa operação, digite o código abaixo no módulo inserido:
Sub ExibeFormulario() UserForm1.Show End Sub
Este código usa o método Show que exibe um objeto UserForm.
Criamos o código em uma Macro, pois vamos abrir o formulário UserForm1 a partir da planilha Excel.
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. Fazendo isso, de imediato será aberta a janela atribuir macro, exibindo a macro ExibirFormulario que criamos no Módulo. Selecione a macro e clique em OK.
Com isso atribuímos a macro criada ao botão de comando da planilha:
A seguir, selecione o botão e altere o nome de Botão 2 para Preencher Listbox;
Pronto!
Basta clicar no botão de comando para que o formulário UserForm seja aberto:
Agora clicando no botão Preencher ListBox teremos:
A seguir temos um pequeno resumo das principais propriedades do controle ListBox:
- RowSource – Especifica a origem que fornece uma lista para um ComboBox ou ListBox;
- ListCount – Especifica a quantidade de itens no ListBox;
- ListIndex – Identifica o item atualmente selecionado em um ListBox ou ComboBox;
- ColumnCount – Especifica o número de colunas a exibir em uma caixa de listagem ou caixa de combinação;
- MultiSelect – Indica se o objeto permite várias seleções;
- List – Retorna ou define as entradas de lista de um ListBox ou ComboBox;
- Selected – Retorna ou define o estado de seleção dos itens em um ListBox.
É claro que existem outras formas de preencher um controle ListBox, mas isso é assunto para outro artigo.
Pegue a planilha aqui: Excel_ListBox.zip