Ja criei um artigo que ensina 4 formas de preencher um combox e neste artigo lhe ensinarei como criar um combobox dependente no VBA Excel.
Neste exemplo estou utilizando dois comboboxes, sendo um de País e outro de estado, onde com base no país selecionado o combo de estado será alimentado.
O primeiro deve listar os poucos nomes de países. O outro deve listar os nomes dos estados do país selecionado. Se o usuário alterar o país na primeira caixa de combinação, a lista da segunda caixa de combinação deverá ser alterada.
Vamos criar um formulário que tenha duas caixas de combinação com rótulos de países e estados e um botão de comando para enviar a entrada.
Clique duas vezes no formulário do usuário. Ele abrirá a área de codificação no objeto UserForm, ele abrirá uma Private Sub UserForm_Click(). Agora, no menu suspenso esquerdo, selecione formulário do usuário. Em seguida, no menu suspenso direito, selecione inicializar, onde será aberto uma Private Sub UserForm_Initialize().
Esta ação faz com que o código que seja inserido nesta sub será executado ao inicializar o formulário.
Então, escrevemos o código de inicialização para a caixa de combinação aqui.
Private Sub UserForm_Initialize() paises = Array("Brasil", "Argentina", "Bolívia", "Estados Unidos") UserForm1.cbo_pais.List = paises End Sub
Inicializamos nossa primeira combobox. Sempre que você carregar o formulário do usuário, o primeiro combox estará pronto com o nome dos países, no exemplo chamo de cbo_paises
Agora, para carregar a segunda caixa de combinação, precisamos verificar qual valor está selecionado na primeira combobox e executar o código toda vez que a combobox países altera seus valores.
Para isso, usaremos o evento Combobox_Change.
No menu suspenso esquerdo, selecione cbo_paises. No menu suspenso direito, selecione Change. (Isso significa que cada vez que o combobox de países foi alterado ele vai executar o código abaixo)
Agora escreva o código abaixo:
Private Sub cbo_pais_Change() Select Case cbo_pais.Value Case "Brasil": estados = Array("São Paulo", "Rio de Janeiro", "Minas Gerais", "Bahia", "Paraná") Case "Argentina": estados = Array("Buenos Aires", "Santa Fé", "Córdoba", "Rio Negro", "San Juan") Case "Bolívia": estados = Array("Santa Cruz", "Cochabamba", "Oruro", "La Paz") Case "Estados Unidos": estados = Array("Arizona", "Califórnia", "Texas", "Flórida", "Ohio") End Select cbo_estado.List = estados End Sub
Abaixo uma explicação do código:
Por ultimo inseri o código do botão que sempre que for selecionado vai registrar na planilha as opções que estão selecionadas no combobox, não é necessário este botão para a rotina funcionar, você pode adaptar o carregamento do combobox da melhor maneira que precisar.
Private Sub bt_selecionar_Click() paises = cbo_pais.Value estados = cbo_estado.Value ThisWorkbook.Worksheets("Base").Range("B1") = paises ThisWorkbook.Worksheets("Base").Range("B2") = estados End Sub
Passo a passo como funciona?
Como criar um combobox dependente?
Quando você executa o evento userform_intialize, inicializamos a primeira caixa de combinação que possui uma lista de países. Posteriormente, o formulário é mostrado ao usuário.
Agora, quando o usuário seleciona qualquer valor da primeira caixa de combinação, o evento cbo_pais_Change é executado. Este evento contém o código para verificar qual valor é selecionado pelo usuário na caixa de combinação cbo_pais e, com base nesse valor, define a matriz de estados e inicializa os valores da caixa de combinação2 cbo_estado com a matriz de estados.
Então, pessoal, é assim que você cria uma combobox dependente no formulário de usuário do VBA.
Espero ter explicado o suficiente e o artigo tenha cumprido sua finalidade.
Se você tiver alguma dúvida sobre este artigo ou qualquer tópico do VBA, pergunte-me na seção de comentários abaixo.
Abraços
Douglas Godoy
Minha planilha de controle de gastos tem campos de ‘categorias de despesas’ e ‘sub-categorias de despesas’ e eu não sabia como fazer combobox inteligentes.
Realmente, a solução funcionou. Muito bom!
Obrigado!
Obrigado pelo seu feedback Jackson, sempre que precisar retorne.
Abraços
Douglas
Show de bola! Muito bom poder contribuir! Abraços