Como Posicionar Controles no Userform

Como Posicionar Controles no Userform

A presença de Userforms foi uma benção para usuários do Microsoft Excel. Isso ninguém discute. Mas a pergunta que não quer calar é:

Como Posicionar Controles no Userform?

Sei bem como é, pois já me perguntei isso muitas vezes no passado.

Fico feliz que você agora esteja procurando pela mesma resposta. Sinal de que está comprometido(a) com cada detalhe do seu projeto, algo raro de encontrar. Comprometimento que irá impactar positivamente sua carreira.

Acesse também nosso canal para assistir a aula completa neste link.

E vamos ao que interessa: descobrir como posicionar controles no userform.

O Userform

Em primeiro lugar, se você está com dificuldades em posicionar controles no userform é porque o tamanho do userform é dinâmico. Correto?

Do contrário, seria fácil posicionar os controles num userform de tamanho estático.

Pois bem, caso seu userform seja ainda estático e você queira implementar esse dinamismo (por exemplo, para que ocupe a tela inteira), pode acessar esta aula onde explico no detalhe como fazer isso.

Pronto!

Isso feito, seu próximo problema será o objeto deste post, ou seja, como posicionar esses controles para que fiquem bem distribuídos na abertura do Userform.

Embora o foco aqui seja o userform, vale a dica: usar o objeto Msgbox junto ao userform vai deixar seu projeto mais agradável e interativo para o usuário. Veja aqui como dominar este recurso.

Criando um modelo

Antes de mais nada, é preciso criar um modelo-base de como serão distribuídos os controles.

Exemplo de modelo de Userform, que servirá de base para saber como posicionar controles no formulario

Sobretudo, é muito importante que você analise e ajuste corretamente as PROPRIEDADES do seu modelo. Isso vai determinar o sucesso do resultado final.

A propósito, a janela de propriedades pode ser visualizada usando a tecla F4, e aqui as propriedades Height, Width, Left e Top serão fundamentais.

Exemplo de Janela de Propriedades do objeto Label no VBE
Exemplo de propriedades do objeto Label(rótulo)

Para melhor exemplificar, seguem as propriedades de Nomes, Tamanho e Posicionamento do Userform do Modelo, bem como os controles presentes no mesmo.

Aliás, para ficar ainda mais fácil trabalhar com esses dados, sugiro que vocês registrem essas propriedades em uma Tabela, da seguinte forma:

Modelo de Tabela para preenchimento das propriedades necessárias para posicionar controles no userform

Embora a posição dos controles esteja definida pelo modelo, este userform possui um código que ajusta seu tamanho em tela cheia.

Private Sub UserForm_Activate()
Dim vAltura As Long
Dim vLargura As Long

vAltura = Application.Height
vLargura = Application.Width

'CODIGO PARA ABRIR O USERFORM EM TELA CHEIA
With usfModeloUserform
    .Width = vLargura
    .Height = vAltura
    .Left = Application.Left
    .Top = Application.Top
End With

'Abaixo codigos de Como Posicionar Controles no Userform

End Sub

Sendo assim, veja abaixo o que ocorre quando pressionamos a tecla F5 para executar o Userform:

Exemplo de como fica o formulário após a execução do código, por isso é necessário saber como posicionar controles no userform

Nossos controles ficaram completamente isolados no canto do Userform.

Perderam, desse modo, a harmonia que havíamos elaborado no modelo inicial.

Vamos resolver esse problema?

Solução: Posicionar Controles no Userform de modo dinâmico

Precisamos posicionar os controles de modo que suas localizações oscilem de acordo com o tamanho do Userform. Mas primeiro vamos adequar o posicionamento utilizando os objetos txtNome e lblNome.

Ilustrando os objetos que vamos configurar agora para posicionar controles no userform

Visto que o Label lblNome é um “satélite” do TextBox txtNome, definimos o posicionamento do txtNome antes e depois o lblNome, respeitando a proporção do campo.

Como mencionado antes, o textBox txtNome tem propriedade Top igual a 20. Este valor, em relação a propriedade Height (Altura) do userform de valor 200, representa 10%.

Ou seja, independente do tamanho do userform, podemos utilizar este percentual para garantir o posicionamento correto do textBox.

Faremos o mesmo em relação a propriedade Left (igual a 50). Ela corresponde a 12,5% da propriedade Width (Largura) de valor igual a 400 do userform.

'Abaixo codigos de Como Posicionar Controles no Userform
'NOME
    'TEXTBOX
    txtNome.Top = 0.1 * vAltura
    txtNome.Left = 0.125 * vLargura

Porém, a mesma lógica não se aplica ao Label lblNome. Devido à proporção, ficará distante do Textbox.

Mas calma, é ainda mais fácil trabalhar com ele.

O lblNome possui exatamente a mesma propriedade Top do txtNome, de modo que basta igualá-los. Quanto a propriedade Left, no modelo o lblNome era 20, enquanto do txtNome era 50, ou seja, 30 de diferença.

Então nosso código fica assim.

'Abaixo codigos de Como Posicionar Controles no Userform

'NOME
    'TEXTBOX
    txtNome.Left = 0.125 * vLargura
    txtNome.Top = 0.1 * vAltura
    txtNome.Width = 0.25 * vLargura
    
    'LABEL
    lblNome.Top = txtNome.Top
    lblNome.Left = txtNome.Left - 30
Proporções do txtNome e lblNome em relação ao Userform destacados na tabela modelo

Encontramos agora um padrão (conforme a tabela) que podemos aplicar aos demais controles. Feito isso, observe só o impacto no resultado final!

Multiplicando o Padrão para Posicionar Controles no Userform

Aplicado aos demais controles, seus futuros projetos terão muito mais dinamismo, precisão e interação… além de você ganhar uma boa dose de “paz no coração” (rs).

(Faça uma pausa e contemple o resultado em tela. Aproveite o momento para tomar aquele cafezinho)

Bem, voltando, vamos detalhar a aplicação dessa lógica aos demais controles.

Vem comigo!

Ilustrando os objetos referente a data que vamos utilizar agora para posicionar controles no userform

Apesar de estar mais à direita no Userform, podemos calcular a diferença entre as propriedades Left do lblDataNasc (Left: 190) e do txtDataNasc (Left: 270). Resultado igual “-80”.

Uma vez que a propriedade Top de ambos for igual, o problema está resolvido.

Proporções do lblDataNasc e txtDataNasc em relação ao Userform destacados na tabela modelo

Em seguida, podemos calcular o percentual da propriedade Left do txtDataNasc (igual a 270) em relação a propriedade Width (igual a 400) do userform. Total: proporção de 67,50%.

A propriedade Top será igual aos controles referente ao Nome, ou seja, 10%.

'DATA DE NASCIMENTO
    'TEXTBOX
    txtDataNasc.Left = 0.675 * vLargura
    txtDataNasc.Top = 0.1 * vAltura
    txtDataNasc.Width = 0.25 * vLargura

    'LABEL
    lblDataNasc.Top = txtDataNasc.Top
    lblDataNasc.Left = txtDataNasc.Left - 80

Do mesmo modo, vamos aplicar os conceitos aos controles referentes ao campo “Cidade”.

objetos referente a data, ilustrando a próxima explicação detalhada do código.

De fato, termos um comboBox aqui não impacta em nada. Calcularemos o percentual da propriedade Left de cboCidade (igual a 133,85) em relação a propriedade Width (igual a 400) do userform. Total: proporção de 33,46%.

A propriedade Top será igual a 90 para ambos os controles, ou seja, 45%.

Proporções do lblCidade e cboCidade em relação ao Userform destacados na tabela modelo

De acordo com nosso padrão, agora basta calcular a diferença entre as propriedades Left do lblCidade (Left : 100) e do cboCidade (Left : 133,85), resultando em “- 33,85”.

'CIDADES
    'COMBOBOX
    cboCidade.Left = 0.335 * vLargura
    cboCidade.Top = 0.45 * vAltura
    cboCidade.Width = 0.3 * vLargura
    
    'LABEL
    lblCidade.Top = cboCidade.Top
    lblCidade.Left = cboCidade.Left - 33.85

Assim encerramos as adequações, implementando o padrão e ajustando nosso commandButton cmdOK.

'BOTAO OK
    cmdOK.Left = 0.395 * vLargura
    cmdOK.Top = 0.66 * vAltura
    cmdOK.Width = 0.18 * vLargura

Projeto Pronto

Enfim, este é o método que encontramos para trazer harmonia ao posicionamento dos controle em seu userform.

Quer mais detalhada? Vem comigo neste vídeo onde explico o passo a passo de como implementar esse recurso.

Acompanhe nosso canal e fique por dentro das novidades e truques do Excel.

Bons estudos e lembre-se: As soluções evoluem dos problemas.

Deixe um comentário

O seu endereço de e-mail não será publicado. Campos obrigatórios são marcados com *