none
Combo Box variável RRS feed

  • Pergunta

  • Estou iniciando o aprendizado em VBA no Excel, mas tenho encontrado algumas dificuldades. Vi uma resposta sua a uma consulta na Internet, relacionada a combo box. Alguém saberia me responder como faço para vincular uma combo box a outra?

    Exemplo:

    Combo 1

    Times de futebol do RJ

    Times de futebol do MG

    Combo 2

    Vasco

    Flamengo

    Fluminense

    Botafogo

    Atlético MG

    Cruzeiro

    A minha intenção é: Ao selecionar na combo 1 Times do RJ somente apareçam as opções relacionadas ao RJ na Combo2. Alguém pode me ajudar nisso?

    terça-feira, 9 de janeiro de 2007 17:40

Respostas

  • Se aplicam sim.

    Mas no caso fica muito mais interessante usar no formulário. Segue abaixo o cod. para usar na planilha.

    Option Explicit
    Dim State, Times 'Declara as variaveis para serem usadas por todo o cod., pois senao seriam usadas apenas nas 'funções expecificas.


    Private Sub cmbEstados_Change() ' tbm preenche a combo quando é incializado a planilha.
    With cmbEstados
      .AddItem "Rio de Janeiro"
      .AddItem "São Paulo"
     ' .Clear
      End With
    End Sub


    Private Sub cmbEstados_Click()
    State = cmbEstados 'Variavel pra preencher as combos qdo forem clicadas e conseguirmos recuperar os dados apos 'limpar as combos

    Times = cmbTimes


    cmbTimes.Clear
    'cmbEstados.Clear 'Coloquei este cod. ,pois se não toda hora que vc clicasse na combo Estados, a combo dos times,
    'iria somando os times, assim ele limpa a combo antes de alinmenta-lo novamente.Esperimenta tirar este cod. só pra vc ver o que 'acontesse e entender melhor
    'Ae no evento click da sua combo onde esta os estados vc pode colocar o seguinte cod.
    cmbEstados_Change
    If cmbEstados = "Rio de Janeiro" Then
    TimesRJ
    ElseIf cmbEstados = "São Paulo" Then
    TimesSP
    Exit Sub 'Aqui vc coloca este cod. para sair da função se ela tiver achado o False ou oTrue
    End If
    End Sub


    Sub TimesRJ()
    With cmbTimes 'Aqui vc coloca o nome da sua combo
     .AddItem "Flamengo"
     .AddItem "Vasco"
     .AddItem "Madureira"
    End With
    End Sub
    'E por ae vai e depois vc cria uma função para os de sao paulo
    Sub TimesSP()
    With cmbTimes 'Aqui vc coloca o nome da sua combo
     .AddItem "Santos"
     .AddItem "Sao Paulo"
     .AddItem "Portuguesa"
    End With
    End Sub


    Private Sub cmdLimpa_Click()
    With cmbTimes
    .Clear
    End With
    End Sub
    Private Sub UserForm_Initialize()
    With cmbEstados
      .AddItem "Rio de Janeiro"
      .AddItem "São Paulo"
    End With
    End Sub


    Private Sub cmbTimes_Click() 'Esse cod. Limpa a cmbEstados, para não ficar se somando os estados so clicar na 'combo.
    cmbEstados.Clear
    cmbEstados.AddItem "Rio de Janeiro"
    cmbEstados.AddItem "São Paulo"
    cmbEstados = State
    cmbTimes = Times
    End Sub


    Private Sub Worksheet_SelectionChange(ByVal Target As Range) 'Esse cod. preenche a combo qdo inicializa a planilha.
    With cmbEstados
    .Clear
      .AddItem "Rio de Janeiro"
      .AddItem "São Paulo"
    End With
    End Sub

    Mas nesse caso tem como vc usar o processo de validação que cria tbm combox, vou criar o cod. e depois eu posto aqui pra vc.

    Ate mais.

    criei uma planilha como exemplo das combo usando a função "Validação".

    Poste seu e-mail que eu te mando ela, ou pegue ela no seguinte endereço até sexta dia 19/01/07.

    http://www.dantinoeadvogados.com.br/combo.xls

    Abraço.

    segunda-feira, 15 de janeiro de 2007 15:14

Todas as Respostas

  • Oi Christian.

    Vc pode começar fazendo uma fução.

    copie e cole o cod. abaixo em um formulario e momeie os combox de acordo com o descrito, e depois é alterar para o que vc realmente ncessita.

    Private Sub cmbEstados_Click()

    cmbTimes.Clear      'Coloquei este cod. ,pois se não toda hora que vc clicasse na combo Estados, a combo dos times,
    'iria somando os times, assim ele limpa a combo antes de alinmenta-lo novamente.Esperimenta tirar este cod. só pra vc ver o que 'acontesse e entender melhor

    'Ae no evento click da sua combo onde esta os estados vc pode colocar o seguinte cod.
    If cmbEstados = "Rio de Janeiro" Then
    TimesRJ
    ElseIf cmbEstados = "São Paulo" Then
    TimesSP
    Exit Sub 'Aqui vc coloca este cod. para sair da função se ela tiver achado o False ou oTrue
    End If
    End Sub

    Sub TimesRJ()
    With cmbTimes 'Aqui vc coloca o nome da sua combo
     .AddItem "Flamengo"
     .AddItem "Vasco"
     .AddItem "Madureira"
    End With
    End Sub

    'E por ae vai e depois vc cria uma função para os de sao paulo

    Sub TimesSP()
    With cmbTimes 'Aqui vc coloca o nome da sua combo
     .AddItem "Santos"
     .AddItem "Sao Paulo"
     .AddItem "Portuguesa"
    End With
    End Sub

    Private Sub cmdLimpa_Click()
    With cmbTimes
    .Clear
    End With
    End Sub

    Private Sub UserForm_Initialize()
    With cmbEstados
      .AddItem "Rio de Janeiro"
      .AddItem "São Paulo"
    End With
    End Sub

    'Pra ficar legalzinho vc ainda pode colocar o seguinte cod.(opcional só demostração do evento clik das combos, vai ficar muito legal.

    Private Sub cmbTimes_Click()
    MsgBox "Você selecionou o Estado  " & "'' " & cmbEstados & " ''" & "  e o time  " & _
    "'' " & cmbTimes & " ''" & "  !!!", vbCritical, "Seleção de combox variável - Anderson Martines"
    End Sub

    Eu utilizei "ElseIf" ao inves so de "Else", pois assim vc pode colocar vaios opções de combox.

    Espero poder ter ajudado, qualquer coisa volte a postar.

    Ate mais.

    quarta-feira, 10 de janeiro de 2007 20:49
  • Anderson,

     

    Este código é para combos dentro de um formulário no excel, mas se aplicam a combos no próprio excel?

     

    Grato,

     

     

    quinta-feira, 11 de janeiro de 2007 12:43
  • Se aplicam sim.

    Mas no caso fica muito mais interessante usar no formulário. Segue abaixo o cod. para usar na planilha.

    Option Explicit
    Dim State, Times 'Declara as variaveis para serem usadas por todo o cod., pois senao seriam usadas apenas nas 'funções expecificas.


    Private Sub cmbEstados_Change() ' tbm preenche a combo quando é incializado a planilha.
    With cmbEstados
      .AddItem "Rio de Janeiro"
      .AddItem "São Paulo"
     ' .Clear
      End With
    End Sub


    Private Sub cmbEstados_Click()
    State = cmbEstados 'Variavel pra preencher as combos qdo forem clicadas e conseguirmos recuperar os dados apos 'limpar as combos

    Times = cmbTimes


    cmbTimes.Clear
    'cmbEstados.Clear 'Coloquei este cod. ,pois se não toda hora que vc clicasse na combo Estados, a combo dos times,
    'iria somando os times, assim ele limpa a combo antes de alinmenta-lo novamente.Esperimenta tirar este cod. só pra vc ver o que 'acontesse e entender melhor
    'Ae no evento click da sua combo onde esta os estados vc pode colocar o seguinte cod.
    cmbEstados_Change
    If cmbEstados = "Rio de Janeiro" Then
    TimesRJ
    ElseIf cmbEstados = "São Paulo" Then
    TimesSP
    Exit Sub 'Aqui vc coloca este cod. para sair da função se ela tiver achado o False ou oTrue
    End If
    End Sub


    Sub TimesRJ()
    With cmbTimes 'Aqui vc coloca o nome da sua combo
     .AddItem "Flamengo"
     .AddItem "Vasco"
     .AddItem "Madureira"
    End With
    End Sub
    'E por ae vai e depois vc cria uma função para os de sao paulo
    Sub TimesSP()
    With cmbTimes 'Aqui vc coloca o nome da sua combo
     .AddItem "Santos"
     .AddItem "Sao Paulo"
     .AddItem "Portuguesa"
    End With
    End Sub


    Private Sub cmdLimpa_Click()
    With cmbTimes
    .Clear
    End With
    End Sub
    Private Sub UserForm_Initialize()
    With cmbEstados
      .AddItem "Rio de Janeiro"
      .AddItem "São Paulo"
    End With
    End Sub


    Private Sub cmbTimes_Click() 'Esse cod. Limpa a cmbEstados, para não ficar se somando os estados so clicar na 'combo.
    cmbEstados.Clear
    cmbEstados.AddItem "Rio de Janeiro"
    cmbEstados.AddItem "São Paulo"
    cmbEstados = State
    cmbTimes = Times
    End Sub


    Private Sub Worksheet_SelectionChange(ByVal Target As Range) 'Esse cod. preenche a combo qdo inicializa a planilha.
    With cmbEstados
    .Clear
      .AddItem "Rio de Janeiro"
      .AddItem "São Paulo"
    End With
    End Sub

    Mas nesse caso tem como vc usar o processo de validação que cria tbm combox, vou criar o cod. e depois eu posto aqui pra vc.

    Ate mais.

    criei uma planilha como exemplo das combo usando a função "Validação".

    Poste seu e-mail que eu te mando ela, ou pegue ela no seguinte endereço até sexta dia 19/01/07.

    http://www.dantinoeadvogados.com.br/combo.xls

    Abraço.

    segunda-feira, 15 de janeiro de 2007 15:14
  • Anderson,

    Eu tomei a liberdade de copiar esse seu código acima e adaptar para as minhas necessidades (espero que não se importe).

    Consegui faze-lo rodar corretamente, com exceção da primeira Combo (no seu caso CmbEstados). Mesmo colocando a linha de código que você sugeriu, toda vez que clico na combo e seleciono alguma opção, as opões que eu adicionei, se repetem várias vezes.

    Você poderia me ajudar?

    Desde já agradeço !

    quinta-feira, 10 de janeiro de 2013 18:53
  • O código fornecido possui um pequeno erro, ele está entrando em laço quando se seleciona algum time. Simplificando um pouco:

    Private Sub cmbEstados_Click()
        cmbTimes.Clear
        With cmbTimes
            Select Case cmbEstados
                Case "Rio de Janeiro"
                    .AddItem "Flamengo"
                    .AddItem "Vasco"
                    .AddItem "Madureira"
                Case "São Paulo"
                    .AddItem "Santos"
                    .AddItem "Sao Paulo"
                    .AddItem "Portuguesa"
            End Select
        End With
    End Sub
    
    Private Sub UserForm_Initialize()
        With cmbEstados
            .AddItem "Rio de Janeiro"
            .AddItem "São Paulo"
        End With
    End Sub

    Se estiver interessado em aprofundar o estudo de caixas de combinação e listagem dependentes, veja: http://www.ambienteoffice.com.br/excel/filtrar_dados_em_formularios/#controles_dependentes


    Felipe Costa Gualberto - http://www.ambienteoffice.com.br

    domingo, 13 de janeiro de 2013 10:32
    Moderador