6 Formas de Percorrer Controles em um Forms: Entenda as razões para usar esta funcionalidade
Neste tutorial você vai aprender 6 Formas de Percorrer Controles em um Forms. 😲
Podemos dizer que você queira mostrar ou ocultar um grupo de controles de formulário com base em alguns critérios. Desta forma, há várias razões pelas quais você pode querer fazer isso, tais como:
👉 Proteja os dados da edição acidental;
👉 Usar a “segurança” no nível de aplicação para ajustar a interface do usuário com base na função do usuário;
👉 Mostrar ou ocultar campos com base no tipo de dados (por exemplo, cliente x fornecedor);
👉 Ocultar informações confidenciais de possíveis ataques.
Seja qual for o motivo, inevitavelmente haverá momentos em que você desejará fornecer algum tipo de tratamento especial para um grupo de controles de formulário.
Dependendo do que esses controles têm em comum, existem várias abordagens diferentes que você pode usar para percorrê-los no VBA.
Vamos conhecê-los agora!💪
6 Formas de Percorrer Controles em um Forms: 1ª Percorrendo cada controle
O 1º exemplo simplesmente percorre a coleção CONTROLS de um forms, ou seja, é uma coleção de todos os controles do formulário. Neste exemplo estou apenas imprimindo o nome do controle na janela imediata para fins de demonstração.
Em um aplicativo real, você substituiria a Debug.Print Ctl.Name
linha por uma ou mais linhas de código que fizessem algo interessante com o objeto de controle, como mostrar/ocultar ou habilitar/desabilitar.
Dim myControls As Control
For Each myControls In Me.Controls
Debug.Print myControls.Name
Next myControls
6 Formas de Percorrer Controles em um Forms: 2ª Por Seção do Formulário
Os formulários do Access possuem 3 seções com as quais você precisa se preocupar*:
👉 Cabeçalho do formulário:Me.Section(acHeader)
👉 Detalhe do formulário:Me.Section(acDetail)
👉 Rodapé do formulário:Me.Section(acFooter)
Cada uma dessas seções tem sua própria Controls
coleção que inclui apenas os controles que foram colocados nessa seção.
Dim myControls As Control
For Each myControls In Me.Section(acDetail).Controls
Debug.Print myControls.Name
Next myControls
Obs: Os formulários também possuem cabeçalho e rodapé de página, mas você não deve usá-los. Eles só aparecem quando o formulário é impresso ou na visualização de visualização de impressão, mas seus usuários não devem imprimir seus formulários. É para isso que servem os relatórios.
6 Formas de Percorrer Controles em um Forms: 3ª Por Tipo de Controle
Você pode usar a propriedade Control Type para tratar todas as suas caixas de texto ou textBox ou todas as suas caixas de combinação ou comboBox, da mesma maneira:
Dim myControls As Control
For Each myConstrols In Me.Controls
Select Case myConstrols.ControlType
Case acLabel: Debug.Print "Label : "; myControls.Name
Case acTextBox: Debug.Print "Textbox: "; myControls.Name
Case acComboBox: Debug.Print "Combo : "; myControls.Name
Case acListBox: Debug.Print "Listbox: "; myControls.Name
End Select
Next myControls
Para obter uma lista completa de enumerações de ControlType, consulte aqui: AcControlType enumeration (Access) .
6 Formas de Percorrer Controles em um Forms: 4 ª Pela propriedade da TAG (Marca) de controle
A propriedade Tag (Marca) é uma pequena propriedade de controle útil que aceita qualquer caracter de até 2.048 caracteres. Você pode usar essa propriedade para identificar grupos de controles que deseja tratar da mesma maneira.
Por exemplo, o código abaixo produzirá o nome de cada controle em nosso formulário que possui um valor de Tag de “MeuGrupo”
Dim myControls As Control
For Each myControls In Me.Controls
If myControls.Tag = "MeuGrupo" Then Debug.Print myControls.Name
Next myControls
A propriedade Tag (Marca) pode ser definida na guia “Outro” da Folha de Propriedades do controle no modo de design do formulário:
Uma das maiores vantagens dessa abordagem é que você pode selecionar [Ctrl] ou clicar-arrastar-selecionar vários controles no Form Design View e definir todos os valores de Tag de uma só vez.
Infelizmente, o contrário não é possível. Não existe uma maneira fácil de selecionar todos os controles que possuem uma determinada propriedade Tag. Se você quiser ver facilmente quais controles receberam algum tratamento especial, considere selecionar controles por nome, conforme mostrado nas duas abordagens finais.
6 Formas de Percorrer Controles em um Forms: 5ª Por nome de controle
Uma desvantagem de usar a propriedade Tag (Marca) para identificar quais controles mostrar ou ocultar é que não há como ver quais controles têm essa propriedade Tag (Marca) e quais não têm. Usando uma instrução Select Case, podemos ver visualmente o nome de cada controle que está recebendo tratamento especial em um local dentro do código.
Dim myControls As Control
For Each myControls In Me.Controls
Select Case myConstrols.Name
Case "TextBox1", "TextBox2"
Debug.Print myControls.Name
End Select
Next myControls
6 Formas de Percorrer Controles em um Forms: 6ª Por propriedade do nome de controle
Existem alguns problemas com a abordagem anterior, no entanto:
👉 Você pode ter um erro de digitação ao digitar o nome do controle no VBA;
👉 O nome do controle pode ser alterado
A vantagem de usar a Name
propriedade de um controle – em vez de usar uma string literal – é que você pode verificar em tempo de compilação se cada um dos controles para os quais você tem tratamento especial realmente existe.
Ao usar o nome do controle como uma string, você perde o benefício da verificação em tempo de compilação. Com nomes de string, erros de digitação e controles renomeados tornam -se erros de lógica . Ao usar a propriedade Name do controle, erros de digitação e controles renomeados são erros de compilação.
Dim myControls As Control
For Each myConstrols In Me.Controls
Select Case myConstrols.Name
Case Me.TextBox1.Name, Me.TextBox2.Name
Debug.Print myControls.Name
End Select
Next myControls
Curso de Access VBA Completo: Do Básico ao Avançado.
Quer aprender a programar no Access? Clique na imagem abaixo:
Por fim, deixe seu comentário sobre o que achou, se usar este recurso e você também pode enviar a sua sugestão para os próximos posts.