Ir ao conteúdo

Excel VBA - Listar na combobox2 conforme o que digitar na combobox1


Ir à solução Resolvido por Midori,

Posts recomendados

Postado

Olá!

Ajuda pra fazer Listar na combobox2 conforme o que digitar na combobox1...

Tipo, tenho no combo1: Cidade, UF, Região, etc...

Gostaria que ao digitar "Cidade" no combo1, na combo2 ao clicar, ele me daria a lista de Cidades.

Se digitar na combo1 "UF", ele me daria a lista de todos os Estados e por ae em diante com os demais...

Segue anexo modelo Planilha q estou tentando adaptar.

obrigado!

Busca_Personalizada_4 - MOD2 (Municipios Brasil).xls

Postado

@jcgmcs A forma mais simples é com RowSource. No evento Change do ComboBox1 sua macro pode identificar a coluna selecionada e atribuir o range para a propriedade RowSource do outro combo. Porém assim não haverá tratamento das repetições.

 

A outra forma é com Loop e aí poderá testar cada um para não adicionar valor repetido e se a sua versão for a 365 poderá usar a função Unique.

Postado

Midori bom dia amigo!

Minha vs é Office 2007...

Então, já fiz uns testes e concluí q pra cada item no combo2 tem q ter um combo separado... o que você tá dizendo seria isso mesmo q ocorreia ou não? porque o que quero é manter apenas essas duas combos 1 e 2 tdeu!?

 

  • Solução
Postado

@jcgmcs Para ficar mais rápido o ideal era ter outras tabelas com as regiões, UF e Porte sem repetição para não ter que fazer o loop nessa. Outra forma de deixar mais rápido o carregamento é usar uma coluna auxiliar para copiar os registros e remover os duplicados (RemoveDuplicates).

 

Private Sub ComboBox1_Change()
    Dim Tabela      As Range
    Dim Coluna      As Integer
    Dim Linha       As Long
    Static Inicia   As Boolean
    
    If Inicia = True Then
        Set Tabela = [A3].CurrentRegion
        
        With WorksheetFunction
            If .CountIf(Tabela.Rows(1), ComboBox1.Value) Then
                Coluna = .Match(ComboBox1.Value, Tabela.Rows(1), 0)
                
                Call cb_Procurar.Clear
                
                For Linha = 2 To Tabela.Rows.Count
                    If .CountIf(Tabela(1, Coluna).Resize(Linha), _
                        Tabela(Linha, Coluna)) <= 1 Then
                            Call cb_Procurar.AddItem(Tabela(Linha, Coluna))
                    End If
                Next Linha
            End If
        End With
    End If
    Inicia = True
End Sub

 

Obs: A variável Inicia é por causa do Initialize do formulário que está ativa o evento Change ao carregar o combo.

 

  • Curtir 1
Postado

Midori boa noite!

Um impasse aqui... rss

A coluna Capital não tá sendo listada... Imagino eu q é por não ser todas as linhas com dados. Tem como você dar uma revisada no código e corrigir esse detalhe por favor... obrigado!!!

Postado

@jcgmcs Não listou porque o registro tem o mesmo nome da coluna. E como a coluna estava no critério das repetições acabou não entrando na lista. Coloquei mais um critério para não adicionar linha em branco.

 

For Linha = 2 To Tabela.Rows.Count
    If Tabela(Linha, Coluna) <> "" Then
        If .CountIf(Tabela(2, Coluna).Resize(Linha - 1), Tabela(Linha, Coluna)) <= 1 Then
            Call cb_Procurar.AddItem(Tabela(Linha, Coluna))
        End If
    End If
Next Linha

 

  

18 horas atrás, jcgmcs disse:

Aproveitando o embalo, pode me dizer como fazer pra salvar a lista na Plan2..?

Qual lista?

Postado

Midori blzz

Este seu código...

Private Sub ComboBox1_Change() Dim Tabela As Range Dim Coluna As Integer Dim Linha As Long Static Inicia As Boolean If Inicia = True Then Set Tabela = [A3].CurrentRegion With WorksheetFunction If .CountIf(Tabela.Rows(1), ComboBox1.Value) Then Coluna = .Match(ComboBox1.Value, Tabela.Rows(1), 0) Call cb_Procurar.Clear For Linha = 2 To Tabela.Rows.Count If .CountIf(Tabela(1, Coluna).Resize(Linha), _ Tabela(Linha, Coluna)) <= 1 Then Call cb_Procurar.AddItem(Tabela(Linha, Coluna)) End If Next Linha End If End With End If Inicia = True End Sub

 

É possível fazer ele ignorar as linhas: 1. 2 e 4 ?

Nessas linhas eu tenho outras informações q não podem ser removidas e estou com problemas por causa disso no "ComboBox1" e "cb_Procurar" já que toda busca é feita na coluna inteira.

Na linha 3 é onde começam meus Cabeçalhos e as informações iniciam a partir da linha 5...

 

Postado

@jcgmcs A tabela do seu anexo começa na linha 3, apenas essa linha não é considerada na lista, e a partir dela todos os dados serão testados até a última linha.

 

Quando você testou a macro nessa planilha do anexo algum dado indevido apareceu no controle? Ou faltou algum que devia ter entrado?

 

As linhas 1 e 2 não fazem parte do range e não vejo sentido ignorar a 4 já que o conteúdo dela faz parte da tabela.

 

Caso esteja tentando adaptar o código em outra planilha, dê mais detalhes sobre a estrutura dela ou envie o anexo.

Postado

Bom dia!

Sim, estou adaptando em outra com minhas informações reais... e com testes q fiz aqui concluí q é por ter dados nessas linhas. Não me preocupei nesses detalhes dessas linhas e colunas porque imaginei q seria fácil de só alterar "a partir de..."

Então, se você puder pôr os comentários e detalhes dessas linhas e colunas pra identificação será ótimo tbém...

 

 

Postado

@jcgmcs Com CurrentRegion toda região a partir de A3 será selecionado automaticamente. E caso tenha dados fora da tabela nas linhas ou colunas consecutivas, vão entrar no range também. Se for esse o caso, você pode alterar a atribuição da Tabela. Faça um teste colocando manualmente o range, p.ex,

 

Set Tabela = [A3:F5573]

 

Postado

Bom dia!

As colunas ainda irei até a "GJ" com outras informações...

E o problema está na linha 2 e 4. Preciso ignorar o que estiver nelas lá nos ComboBox...

Postado

@jcgmcs O código alterado para carregar o combo da tabela do último anexo,

 

Private Sub ComboBox1_Change()
    Dim Campo       As Range
    Dim Coluna      As Integer
    Dim Linha       As Long
    Static Inicia   As Boolean
    
    If Inicia = True Then
        Set Campo = [3:3]
        
        With WorksheetFunction
            If .CountIf(Campo, ComboBox1.Value) Then
                Coluna = .Match(ComboBox1.Value, Campo, 0)
                
                Call cb_Procurar.Clear
                
                For Linha = 5 To ThisWorkbook.ActiveSheet.UsedRange.Rows.Count
                    If Cells(Linha, Coluna) <> "" Then
                        If .CountIf(Cells(2, Coluna).Resize(Linha - 1), _
                            Cells(Linha, Coluna)) <= 1 Then
                                Call cb_Procurar.AddItem(Cells(Linha, Coluna))
                        End If
                    End If
                Next Linha
                
            End If
        End With
    End If
    Inicia = True
End Sub

 

Postado

Midori boa noite!

Só mais um ajuste... rss

Por favor, conseguiria fazer ignorar o que tiver nas linhas 2 e 4 ? O conteúdo está sendo listado na ListView e não queria isso...

Postado

A listagem q me refiro não é no combobox mas sim na própria ListView... o que é digitado nessas linhas, tbém é listado no Listview tndeu...

Postado

Olá!

Como fazer código abaixo carregar combo "cb_Procurar" em ordem alfabética..?

 

Private Sub ComboBox1_Change()

 

    Dim Campo       As Range
    Dim Coluna      As Integer
    Dim Linha       As Long
    Static Inicia   As Boolean
    
    If Inicia = True Then
        Set Campo = [3:3]
        
        With WorksheetFunction
            If .CountIf(Campo, ComboBox1.Value) Then
                Coluna = .Match(ComboBox1.Value, Campo, 0)
                
                Call cb_Procurar.Clear
                
                For Linha = 5 To ThisWorkbook.ActiveSheet.UsedRange.Rows.Count
                    If Cells(Linha, Coluna) <> "" Then
                        'If .CountIf(Cells(2, Coluna).Resize(Linha - 1), _
                            Cells(Linha, Coluna)) <= 1 Then
                            If .CountIf(Cells(5, Coluna).Resize(Linha - 4), Cells(Linha, Coluna)) <= 1 Then
                                Call cb_Procurar.AddItem(Cells(Linha, Coluna))
                        End If
                    End If
                Next Linha
                
            End If
        End With
        
    End If
    Inicia = True
   

End Sub

Crie uma conta ou entre para comentar

Você precisa ser um usuário para fazer um comentário

Criar uma conta

Crie uma nova conta em nossa comunidade. É fácil!

Crie uma nova conta

Entrar

Já tem uma conta? Faça o login.

Entrar agora

Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas comunidades sobre tecnologia do Brasil. Leia mais

Direitos autorais

Não permitimos a cópia ou reprodução do conteúdo do nosso site, fórum, newsletters e redes sociais, mesmo citando-se a fonte. Leia mais

×
×
  • Criar novo...

LANÇAMENTO!

eletronica2025-popup.jpg


CLIQUE AQUI E BAIXE AGORA MESMO!