Olá amigos,
Quando estamos trabalhando em um projeto como o desenvolvimento de um sistema que contenha formulários temos várias opções de controles, uma destas opções é o ComboBox (Caixa de combinação).
Em um formulário de usuário do Excel , você pode criar listas suspensas usando o controle ComboBox. A caixa de combinação pode ter uma única coluna, ou mais de uma coluna apresentando os dados.

Mostrarei abaixo algumas formas de preencher uma ComboBox:
Utilizando: .RowSource
A maneira mais simples é utilizarmos a propriedade .RowSource, siga os passos abaixo:
- Insira um novo formulário em seu projeto VBA.
- Neste novo formulário insira um ComboBox (Caixa de combinação).
- Altere o nome do ComboBox para: cbo_teste ou o nome que preferir.
- Clique duas vezes em seu formulário e insira o código abaixo.
Private Sub UserForm_Initialize() Me.cbo_teste.RowSource = "Plan1!A1:A10"; End Sub
Incluimos o código em UserForm_Initialize para que ao inicializar o formulário os dados do combo box sejam carregados através de .RowSource.
IMPORTANTE: O exemplo acima pode ser utilizado em casos onde os itens que irão compor o ComboBox serão sempre os mesmos, no caso itens fixos sem a necessidade de inclusão ou exclusão de itens da lista, tendo em vista que .RowSource refere-se a um intevalo de uma das planilhas da pasta de trabalho.
Utilizando: Do Until
No mesmo ComboBox e formulário podemos inserir o código abaixo com a aplicação:
Private Sub UserForm_Initialize()
lin = 2
Do Until Sheets("Plan1").Cells(lin, 1) = "";
cbo_teste.AddItem Sheets("Plan1").Cells(lin, 5)
lin = lin + 1
Loop
End Sub
IMPORTANTE: O código acima lista todos os itens de uma determinada planilha e de determinada coluna, o mesmo traz todos os itens até a última linha, independente se hajam ou não duplicidades de itens, este exemplo pode ser utilizado em sistemas que inserimos itens através de formulários na lista.
Entendendo o código acima: Utilizamos Do Until , essa estrutura irá repetir um trecho de código enquanto uma determinada condição for verdadeira, no caso enquanto a linha do loop não estiver vazia.
Podemos aplicar o código também até que uma determinada condição torne-se verdadeira. Podemos usar dois operadores condicionais diferentes, que podem aparecer no início ou no final do trecho de código, são eles: While e Until. Neste caso utilizamos Until.
Utilizando: For Next
Carregando dados com duplicidades.
Private Sub UserForm_Initialize()
Dim i, j As Long
Dim temp, area As Variant
ultimaLin = Sheets("Plan1").Cells(Rows.Count, "A").End(xlUp).Row
'A linha abaixo refere-se a coluna que contém os dados da lista.
'Temos linha 2, coluna 5 até a última linha da coluna 5.
'Altere o número da coluna conforme a necessidade do seu projeto.
area = Range(Cells(2, 5), Cells(ultimaLin, 5)).Value
For i = 1 To UBound(area, 1)
For j = i + 1 To UBound(area, 1)
If area(i, 1) > area(j, 1) Then
temp = area(i, 1)
area(i, 1) = area(j, 1)
area(j, 1) = temp
End If
Next
Next
Me.cbo_teste.List = area
End Sub
IMPORTANTE: O código acima lista todos os itens de uma determinada planilha e de determinada coluna, o mesmo traz todos os itens até a última linha, independente se hajam ou não duplicidades de itens.
Você pode usar UBound para determinar o total número de elementos em uma matriz. O exemplo a seguir calcula a dimensão total do array a no exemplo anterior onde definimos a última linha e a linha inicial.
Utilizando: For Each
Carregando dados sem duplicidades.
Private Sub UserForm_Initialize()
Dim ultimaLin As Long, area As New Collection
Dim Value As Variant, temp() As Variant
On Error Resume Next
'A linha abaixo identifica a última linha
ultimaLin = Sheets("Plan1").Range("A" & Rows.Count).End(xlUp).Row
'A linha abaixo refere-se a coluna que contém os dados da lista
temp = Sheets("Plan1").Range("E2:E" & ultimaLin).Value
For Each Value In temp
If Len(Value) > 0 Then area.Add Value, CStr(Value)
Next Value
For Each Value In area
'Adicionando item ao ComboBox
cbo_teste.AddItem Value
Next Value
Set area = Nothing
End Sub
IMPORTANTE: Esta é a maneira que podemos considerar como a que oferece a melhor prática relacionada a manutenção, pois conforme os novos itens forem sendo inseridos na coluna que contém os dados os mesmos serão listados no ComboBox(Caixa de Combinação), esta maneira ignora as duplicidades e lista apenas itens como únicos .
Temos neste artigo 4 formas de preencher uma ComboBox (Caixa de combinação), estas são apenas propostas pois sei que o desenvolvimento via VBA não possui limites e podemos encontrar diversas formas de fazermos uma única coisa.
Caso conheça mais alguma forma de alimentarmos um ComboBox com dados da planilha peço que compartilhe conosco.
Agradeço pela leitura e fico no aguardo de seus comentários e sugestões.
Um abraço. DG

Deixe um comentário