Como preencher combobox dependente com VBA

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.

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.

combobox dependente
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:

Combobox dependentes explicação de códigos

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




.

Sobre o Autor

Deixe uma resposta

O seu endereço de e-mail não será publicado. Campos obrigatórios são marcados com *