Combobox/Listbox dependentes
Nota importante: para ter acesso aos vídeos e arquivos exemplos deste site, adquira um dos planos apresentados abaixo. Você pode comprar em até 5x no Cartão de Crédito.
Veja como comprar e saiba mais sobre o material oferecido, clicando aqui.
Para se criar Combobox/Listbox dependentes é preciso que haja um campo comum entre as mesmas. Como exemplo, observe na figura abaixo, o relacionamento entre as tabelas tblEstados e tblCidades, em que o campo comum é o idEstado. Este campo, que é do tipo numeração automática, identifica de forma exclusiva, o Estado cadastrado. Na tabela tblCidades, o campo idEstado permite identificar quais cidades pertencem a um determinado estado.
Para melhor compreensão, imagine o primeiro cadastro na tabela tblEstados sendo a cidade de São Paulo. O campo idEstado receberá automaticamente o número 1. Ao lançar as cidades de São Paulo na tabela tblCidades, bastará indicar no campo IdEstado o valor 1 para associar que as cidades cadastradas pertencem ao estado de São Paulo.
Ao lançar a segunda cidade na tabela tblEstados, por exemplo - Rio de Janeiro, automaticamente idEstado receberá o número 2. Ao acrescentar as cidade na tabela tblCidades, pertencentes ao estado do Rio de Janeiro, bastará informar o número 2. Assim, teremos a seguinte lista de cadastros:
tblEstados:
1 | São Paulo
2 | Rio de Janeiro
tblCidades:
1 | Campinas
1 | Campos do Jordão
1 | São Caetano
2 | Duque de Caxias
2 | São Gonçalo
No exemplo fornecido, a primeira Combobox lista os estados e a segunda Combobox lista as cidades. A segunda Combobox, que lista as cidades, será dependente da informação da primeira Combobox, ou seja, o usuário deverá selecionar o Estado para que a segunda Combobox liste apenas as cidades do estado selecionado.
Ao selecionar o estado na primeira Combobox, temos a informação do campo idEstado, que identifica o Estado de forma exclusiva.
O campo idEstado está oculto nas Combobox, pois não faz sentido para o usuário a visualização deste. Usamos então, a técnica de esconder a coluna, conforme apresentado na Dica 47 acima.
Usamos o evento Após atualizar da primeira Combobox para montagem da consulta, origem da segunda Combobox. Para filtragem usamos o campo idEstado que é comum as duas tabelas e assim sendo, podemos identificar de forma exclusiva as cidades pertencentes ao estado selecionado. Observe bem, os comentários no código abaixo:
Private Sub cboEstado_AfterUpdate()
Dim strSql as string
'---------------------------------------------------------------------------
'Montando a consulta filtrada da segunda Combobox, que lista as cidades.
'Observe que a filtragem é feita pela campo idEstado, comum as duas tabelas.
'Observe que o campo idEstado da Combobox Estado está sendo extraído da
'primeira coluna, que começa do ZERO(0).
'A função nz() retorna o valor 0, caso não tenha sido selecionado o Estado
'na primeira Combobox e assim, a segunda Combobox, apresentará uma lista vazia.
'---------------------------------------------------------------------------
rSql = "SELECT idEstado,Cidade,População FROM tblCidades "
strSql = strSql & "WHERE idEstado = " & Nz(Me!cboEstado.Column(0), 0)
'----------------------------------------------------------------
'Carregando a consulta filtrada na Combobox que lista as cidades Me!cboCidade.RowSource = strSql
'----------------------------------------------------------------
Me!cboCidade.SetFocus 'Combobox das cidades recebe o foco Me!cboCidade.Dropdown 'Abre automaticamente a lista End Sub
Segue o arquivo exemplo para você praticar e estudar as linhas de código:
Bom estudo!
Os dez artigos mais visitados
MontaRibbons v.7.0 - Assistente completo para criar ribbons no Access
Vídeo - Controle personalizado de Acesso de Usuários
Vídeo - Aprenda sobre filtragens
Vídeo - Segurança máxima, usando o OPEN
Uma ajuda para quem está começando um negócio ou um projeto
Integrando o Access com Servidor MySQL - Introdução
Desabilitando a faixa(ribbon) superior do Access
Vídeo - Programação de relatórios - Parte 1
Como carregar o seu menu sem que ele vá para lista de suplementos
Adquira o kit UsandoAccess e aprenda em alta velocidade
3 comentário(s) Eriston Mattos 03/01/2024 07:31:20 Mestre Avelino, como fazer isso funcionar em um subformulário contínuo no formulário? Ressaltando que não funciona se eu alterar o ex para: Formulário: frmTeste (com outros campos) Subformulário contínuo: frmTesteSub com os campos Estado e Cidade: usar uma consulta na "Origem da Linha" do campo Cidade, onde eu colocaria [Formulários]![frmTeste]![frmTesteSub]![Estado] no critério do campo Estado Só funciona até o segundo item do subformulário contínuo, depois as Cidades somem após atualizar o campo Estado. Conhece outra forma para subformulários contínuos em formulários, sem ser: [Formulários]![frmTeste]![frmTesteSub]![Estado]? Att, Ferracine 16/02/2022 05:10:58 A dica é muito bacana, porém, estou tendo problemas no armazenamento de valor no campo, por exemplo, crei a tabela tblITENS (folha de dados) onde nessa tabela criei as combos com os mesmos nomes do exemplo e colunas, meu objetivo é armazenar vários registros. No primeiro registro da certo quando seleciono Estado e Cidade, mas nos próximos registros da tabela o negócio fica maluco, eu seleciono o Estado de SP e ele me retorna a lista normal das cidades, e quando seleciono uma cidade de SP ele armazena uma cidade do RJ. O que eu fiz de errado? Ferracine 16/02/2022 05:08:52 A dica é muito bacana, porém, estou tendo problemas no armazenamento de valor no campo, por exemplo, crei a tabela |