.NET

5 dez, 2013

VBA – Excel – Usando o controle ListBox

Publicidade

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:

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:

vba_xlslb1

 

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:

vba_xlslb2

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).

vba_xlslb3

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.

vba_xlslb4

Vamos incluir no projeto VBA um formulário ou UserForm. Para isso, clique no menu Inserir -> UserForm:

vba_xlslb5

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

vba_xlslb6

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:

vba_xlslb7

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:

vba_xlslb8

A seguir, selecione o botão e altere o nome de Botão 2 para Preencher Listbox;

vba_xlslb9

Pronto!

Basta clicar no botão de comando para que o formulário UserForm seja aberto:

vba_xlslba

Agora clicando no botão Preencher ListBox teremos:

vba_xlslbb

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