DamascenoJr. 11/6/2020, 20:35
Se 1 carácter ocupa 0,5 centímetro, dois caracteres ocupam 1, três ocupam 1,5. Seguindo essa lógica, basta multiplicar a quantidade de carácter por 0,5 centímetro para se ter a largura da caixa de texto.
Não acho muito legal ter um objeto que pode "esticar" a ponto de sobrepor outro objeto. Melhor ter uma ideia do tamanho máximo que o objeto pode chegar e fixá-lo aí. Por isso no comentário também disse ser desnecessário.
Bom, ressalvas dadas, segue o exemplo.
- Código:
'função única para ser usada por dois eventos distintos
Private Sub fncAjustaCaixa(strTexto As String)
'a caixa de texto usa uma fonte em que cada caracter ocupa o mesmo espaço
'a caixa está ajustada para 5 caracteres, medindo 1,095 centímetros
'as medidas no VBA são em twips, cada centímetro vale 567 twips
'se já tiver atingido o limite de caracteres então
If Len(strTexto) >= 5 Then
'a medida da caixa deve ser reajustada dando espaço para um caracter extra
Me.Texto0.Width = (Len(strTexto) + 1) * (1.095 / 5 * 567)
'senão
Else
'a caixa deve permanecer com o tamanho padrão, isto é, ajustada para 5 caracteres
Me.Texto0.Width = 5 * (1.095 / 5 * 567)
End If
'tudo em uma linha só
'Me.Texto0.Width = IIf(Len(strTexto) >= 5, Len(strTexto) + 1, 5) * (1.095 / 5 * 567)
End Sub
'evento "No Atual" do formulário
Private Sub Form_Current()
Call fncAjustaCaixa(Nz(Me!Texto0.Value))
End Sub
'evento "Ao Alterar" da caixa de texto
Private Sub Texto0_Change()
Call fncAjustaCaixa(Nz(Me!Texto0.Text))
End Sub
- Anexos
- AutoAjustaCaixaTexto.zip
- Você não tem permissão para fazer download dos arquivos anexados.
- (18 Kb) Baixado 46 vez(es)