Prezado Leitor(a)!
Imagine que você precise criar uma funcionalidade nos formulários que permita o usuário selecionar as colunas de um ListBox para melhor visualização??? Ou até mesmo, caso você tenha uma quantidade grande de campos, permitindo que o usuário sempre possa visualizar um tipo de layout definido por você quando ele abrir um formulário??? Neste tutorial, Customizando Colunas de um ListBox no Access, você vai aprender o passo a passo de como implementar em seus projetos.
Suponhamos que eu tenha a tabela abaixo, com os campos iD, Nome, Data_Nascimento, Telefone e E-mail.
Agora, eu quero apresentar esta tabela em um formulário, mais precisamente em um ListBox para que o usuário possa visualizar todos os dados da tabela, conforme imagem abaixo.
Repare que todas as colunas do ListBox estão flegadas para serem exibidas. Á medida que vc desmarca uma determinada coluna, ela deixa de aparecer do ListBox, conforme imagem abaixo.
E como podemos criar esta funcionalidade?
Primeiramente devemos parametrizar as colunas que deverão ser exibidas automaticamente quando o formulário for carregado. Para isso devemos entrar na Folha de Propriedade de cada CheckBox e deixar a Propriedade Valor Padrão como ‘Sim’ quando vc quiser que a coluna apareça e ‘Não’ quando você não quiser que a coluna apareça ao carregar o formulário.
Outro detalhe está nas propriedades da ListBox. Repare que a largura das colunas podem ser respeitadas no código. Portanto, anote o tamanho de cada coluna para elas possam ser colocadas no código VBA.
Agora vamos aos códigos. Primeiramente vamos criar um procedimento que vai ser aplicável para cada checkbox.
Private Sub AtualizarLista()
Dim intTotColuna As Integer
Dim strColuna As String
Dim rs As String
intTotColuna = 1
'Defino a largura da coluna
strColuna = "0"";"
rs = "SELECT iD"
If Me.chkNome = True Then
intTotColuna = intTotColuna + 1
strColuna = strColuna & "1.2"";"
rs = rs & ", Nome"
End If
If Me.chkNascimento = True Then
intTotColuna = intTotColuna + 1
strColuna = strColuna & "1.5"";"
rs = rs & ", Data_Nascimento"
End If
If Me.chkTelefone = True Then
intTotColuna = intTotColuna + 1
strColuna = strColuna & "1.2"";"
rs = rs & ", Telefone"
End If
If Me.chkEmail = True Then
intTotColuna = intTotColuna + 1
strColuna = strColuna & "2.0"";"
rs = rs & ", Email"
End If
rs = rs & " FROM tbl_Cliente"
Me.ListaClientes.ColumnCount = intTotColuna
Me.ListaClientes.ColumnWidths = strColuna
Me.ListaClientes.RowSource = rs
End Sub
E o que este procedimento faz?
A medida que um checkbox for flegado ele formata a coluna que aquele checkbox se refere. Suponhamos que o chkNascimento (representa a coluna ‘Data_Nascimento’ do ListBox) seja flegado, ele vai ocupar a posição da coluna intcoluna = intcoluna + 1, neste caso a 2ª coluna, já que intcoluna vale 1 e a variável strColuna, vai receber o tamanho desta coluna. Repare que esta variável é do tipo String, já que ela recebe uma concatenação para suportar o formato dos campos da propriedade largura da coluna do ListBox e a variável ‘rs’ vai receber o parâmetro SQL para ser adicionada na propriedade fonte de controle do ListBox.
Vídeo Aula: Customizando Colunas de um ListBox no Access
Feito este procedimento, devemos chamá-la em cada evento ‘Após Atualizar’ de cada checkbox, conforme abaixo:
Private Sub chkEmail_AfterUpdate()
AtualizarLista
End Sub
Private Sub chkID_AfterUpdate()
AtualizarLista
End Sub
Private Sub chkNascimento_AfterUpdate()
AtualizarLista
End Sub
Private Sub chkNome_AfterUpdate()
AtualizarLista
End Sub
Private Sub chkTelefone_AfterUpdate()
AtualizarLista
End Sub
Para concluir, não podemos esquecer de chamar esta função no evento ‘Ao Carregar’ do formulário. Assim será(ão) exibido(s) apenas a(s) coluna(s) que você definiu como ‘Sim’ na propriedade Valor Padrão de cada checkbox.
Private Sub Form_Load()
AtualizarLista
End Sub
Gostou do Tutorial?
Deixe seu comentário aqui embaixo. Queremos lhe ouvir!
Baixe o template ColunasListBox.zip, para que você possa estudar!!!!
Permalink
COMO MARCAR E DESMARCAR TODOS OS CHECKBOX EM UM FORMULARIO
Permalink
Luis.
Basta colocar um botão, que no evento ao clicar deste botão faça checkbox1,Value = True, checkbox2.Value = True….
e para desmarcar é colocar todos como False.