VBA – Criando ComboBox Encadeados

Outra dúvida muito comum na comunidade VBA. ComboBox Encadeados quer dizer que em dois ou mais ComboBoxes, ao atualizar os dados de um ComboBox, os outros são afetados. Isso é útil quando os dados entre eles estão relacionados, o que quase sempre é verdade.

No exemplo deste post, a relação dos dados será baseada na tradicional Produto e Categoria. A pasta de trabalho deve estar disposta em duas planilhas da seguinte forma:

Planilha de Categorias

Planilha de Produtos

É preciso que os dados da coluna NomeDaCategoria na planilha de Produtos estejam compatíveis com os da planlha Categorias, ou o filtro não funcionará.

Após isso, crie um UserForm com a seguinte “cara”:

Estrutura do Formulário ComboBox Encadeados

Para que o código funcione sem precisar alterar nada, nomeie os campos da seguinte forma:

LabelCategorias
ComboBoxCategorias
LabelProdutos
ComboBoxProdutos

Em seguida, adicione o seguinte código o formulário:

Private Sub ComboBoxCategorias_Change()
    Call CarregaProdutos(Me.ComboBoxCategorias.List(Me.ComboBoxCategorias.ListIndex))
End Sub
 
Private Sub UserForm_Initialize()
    Call CarregaCategorias
End Sub
 
Private Sub CarregaCategorias()
    Dim linha As Integer, coluna As Integer
    linha = 2
    coluna = 1
    Me.ComboBoxCategorias.Clear
    With Sheets("Categorias")
        Do While Not IsEmpty(.Cells(linha, coluna))
            Me.ComboBoxCategorias.AddItem .Cells(linha, coluna).Value
            linha = linha + 1
        Loop
    End With
End Sub
 
Private Sub CarregaProdutos(ByVal Categoria As String)
    Dim linha As Integer, colunaProduto As Integer, colunaCategoria As Integer
    linha = 2
    colunaProduto = 1
    colunaCategoria = 2
    Me.ComboBoxProdutos.Clear
    With Sheets("Produtos")
        Do While Not IsEmpty(.Cells(linha, colunaProduto))
            If .Cells(linha, colunaCategoria).Value = Categoria Then
                Me.ComboBoxProdutos.AddItem .Cells(linha, colunaProduto).Value
            End If
            linha = linha + 1
        Loop
    End With
End Sub

Execute o formulário e selecione uma categoria no primeiro ComboBox. Veja que no ComboBox de produtos são mostrados apenas aqueles que pertecem à categoria selecionada:

ComboBox Encadeados em Funcionamento

Obviamente existem várias formas de fazer o mesmo trabalho. Invente a sua, ou, faça o download do exemplo no link abaixo:
😉

http://www.tomasvasquez.com.br/downloads/ComboBoxEncadeado.zip

Bom proveito!

Comentários

comentários

3 thoughts on “VBA – Criando ComboBox Encadeados”

  1. Como faço uma Planilha (Menu) com dois COMBOBOX,
    onde o primeiro Combobox navega pela Plan1 – Plan2 e Plan3.
    Enquanto o segundo Combobox navega pela Plan4 – Plan5 e Plan6.

    Alguém tem algum exemplo?

    Tenho um exemplo que funciona somente o 1º Combobox, enquanto o segundo, não roda.

    EM ANEXO O EXEMPLO. (VBA/Excel)

    Grato,

Comments are closed.