Preenchendo uma ListBox
Muitas vezes quando trabalhamos com programação se faz
necessário criar interfaces mais agradáveis ao usuário final a fim de facilitar
a utilização das ferramentas criadas. Com isso muitas vezes é necessário que criar
listas de seleção, carregar dados, fazer filtros, entre outros a fim de levar
ao usuário uma escolha dentre uma lista de opções.
As ListBox, também conhecidas como caixa de listagem, são
itens usados especialmente para essa função, através delas o usuário pode listar
itens dentro de um critério determinado por ele. Na Figura 1 temos um exemplo
de ListBox.
Figura 1: Exemplo de ListBox
Mas como fazer uso dessas caixas de listagem, bom não é um
bicho de sete cabeças e você vai aprender agora como preenche-las.
Nas fases abaixo vamos aprender como preencher essas ListBox
para serem usadas de acordo com a sua necessidade. Vamos a ela:
1º Fase:
Abra o Visual Vasic for Applications do seu Excel e crie uma
UserForm, em seguida insira uma ListBox, uma ComboBox, um CommandButoon e uma
Label conforme figura acima. As dimensões e nomes a serem dados aos botões fica
a critério do usuário, no nosso caso não houve nenhuma alteração nestes itens na ListBox informar no campo ColumnCount em propriedades da ListBox que ela deve ter 5 colunas.
2º Fase:
Para aprendermos como preencher essa listagem vamos usar o
critério de Uf do cliente em um pequeno banco de dados de clientes. Com isso a
primeira coisa a se fazer é determinar onde estará o critério para seleção, que
no nosso caso vai se uma Combobox com as Uf dos clientes.
Para isso iremos criar um código na form na ação inicialize
da UserForm de acordo com os passos abaixo:
Na ação inicialize da UserForm digitaremos o código da
seguinte forma: primeiro digita-se o nome da ComboBox seguido de “.RowSourse =”
depois entre aspas digita-se o nome da planilha onde esta as informações que
devem estar listadas na ComboBox seguido do código para achar a última linha
preenchida da coluna conforme exemplo abaixo.
ComboBox1.RowSource = "Plan2!A1:A"
& Sheets("planilha").Range("A1").End(xlDown).Row
Nesse código irá preencher a ComboBox com os dados da
planilha até a última linha preenchida da coluna selecionada da planilha
informada.
3º Fase:
Chegou a hora de preencher a ListBox, para isso nós vamos
usar uma estrutura de repetição, a saber a estrutura Do While... Loop, e uma
estrutura de decisão, a saber a estrutura If...Else... End If, afim de
preencher a ListBox apenas com os dados requeridos. Vamos a o nosso código:
A primeira coisa a se fazer é criar a estrutura de
repetição. Para isso iremos usar a estrutura Do While... Loop para que o nosso
código possa percorrer todo nosso banco de dados.
Nesse comando nós estamos informando para estrutura que ela
deve repetir o código enquanto a linha verificada da planilha “Bco_Dados” for
diferente de vazio.
Sub GerarRelatório()
Dim linha as Integer
linha = 2
Do While
Sheets("Bco_Dados").Cells(linha, 1) <> ""
linha = linha + 1
Loop
End Sub
Note que criamos também uma variável chamada “linha” do tipo
inteira para que possa informar a nossa estrutura de repetição qual a linha que
ela está verificando, para isso também é necessário que nós incrementemos essa
variável, ou seja, somemos mais 1 a cada vez que ela passar pelo Loop, fazendo
com que na primeira vez a variável “linha” seja 2, depois 3, depois 4 e assim
por diante até que a linha verificada esteja vazia, a fim de não gerar um Loop
infinito, pois ele nunca sairia da linha 2, e com isso travar o sistema.
Note que demos um valor inicial de 2 para variável linha,
isso foi feito porque nosso banco de dados começa a seu preenchimento a partir
da linha 2.
4º Fase
Chegou a hora de adicionarmos nossa estrutura de decisão, a
estrutura If...Else...End If, com ela nós vamos verificar se a linha atende nosso
critério ou não, onde caso atenda o código exibe as informações na nossa
ListBox caso não atenda e não mostra.
Na nossa comparação estamos pesquisando na aba “Bco_Dados”
por Uf do cliente onde sé exibirá o cliente que for da Uf selecionada.
Note que ele está fazendo a comparação na célula referente a
variável linha da coluna 4 que é a coluna de Uf.
Sub GerarRelatório()
Dim linha as Integer
linha = 2
Do While
Sheets("Bco_Dados").Cells(linha, 1) <> ""
If Sheets("Bco_Dados").Cells(linha, 4)
= ComboBox1 Then
Else
End if
linha = linha + 1
Loop
End Sub
5º Fase
Chegou a hora de informar o que fazer caso a linha
pesquisada atenda nosso critério do relatório, no nosso caso se atender o
critério queremos que as informações sejam exibidas na ListBox.
Vimos que nosso banco de dados é composto de 5 colunas, com
isso precisaremos escrever 5 linhas de comando para podermos levar as 5 colunas
para nosso ListBox, uma para cada coluna. Para isso iremos usar o seguinte
código:
Sub Relatório()
Dim linha as Integer
linha = 2
'Limpar ListBox
ListBox1.Clear
'Preencher ListBox
Do
While Sheets("Bco_Dados").Cells(linha, 1) <> ""
If Sheets("Bco_Dados").Cells(linha, 4)
= ComboBox1 Then
With
ListBox1
.AddItem
.List(linhalistbox, 0) =
Sheets("Bco_Dados").Cells(linha, 1)
.List(linhalistbox, 1) =
Sheets("Bco_Dados").Cells(linha, 2)
.List(linhalistbox, 2) =
Sheets("Bco_Dados").Cells(linha, 3)
.List(linhalistbox, 3) =
Sheets("Bco_Dados").Cells(linha, 4)
.List(linhalistbox, 4) =
Sheets("Bco_Dados").Cells(linha, 5)
End With
linhalistbox = linhalistbox + 1
End If
linha = linha + 1
linha = linha + 1
Loop
End Sub
No código acima estamos informando que caso atenda nosso
critério de seleção nosso código deve exibir na ListBox na linhalistbox coluna 0
os dados que estão na aba “Bco_Dados” célula linha coluna 1 e assim
sucessivamente, uma para cada coluna, lembrando de mudar a coluna a cada uma
das 5 linha de código digitada.
Nós usamos, também, o comando With com a propriedade AddItem,
informando que ele deve escrever na ListBox os dados da linha de comando abaixo
atpe o End With.
Note que aqui nós criamos uma outra variável inteira de nome
“linhalistbox”, isso foi feito para que nossa ListBox não tenha linhas em
branco, por isso criamos outra variável de nome “linhalistbox” para representar
as linhas da ListBox, porque nem sempre os dados que queremos vão estar um
debaixo do outro, com isso caso usássemos a variável “linha” teriam espações em
branco dentro da nosso ListBox, lembrando que essa variável também tem que ser
incrementada com 1 a cada vez que nosso critério for atendido afim de que o
código não subscreva por cima de um item já levado para a ListBox.
Vídeo explicativo: https://www.youtube.com/watch?v=L3654-HmI1U
Nenhum comentário:
Postar um comentário