VBA - Excel - Usando o 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

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;

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:

Vamos usar o evento Click do controle CommandButton para que quando o usuário clicar 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 3 colunas pois vamos obter os dados da planilha que possui 3 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ário UserForm1.

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:

  1. RowSource - Especifica a origem que fornece uma lista para um ComboBox ou ListBox.
  2. ListCount  - Especifica a quantidade de itens no ListBox
  3. ListIndex - Identifica o item atualmente selecionado em um ListBox ou ComboBox.
  4. ColumnCount - Especifica o número de colunas a exibir em uma caixa de listagem ou caixa de combinação.
  5. MultiSelect - Indica se o objeto permite várias seleções.
  6. List - Retorna ou define as entradas de lista de um ListBox ou ComboBox.
  7. 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

João 6:44 Ninguém pode vir a mim, se o Pai que me enviou não o trouxer; e eu o ressuscitarei no último dia.

João 6:45 Está escrito nos profetas: E serão todos ensinados por Deus. Portanto todo aquele que do Pai ouviu e aprendeu vem a mim.

Referências:


José Carlos Macoratti