Formatando textbox  [Resolvido]

Visual Basic for Aplication e macros no Excel.
Regras do fórum
Sua dúvida foi respondida? Marque como RESOLVIDO em seus tópicos, usando o botão com marca verde. Imagem

Formatando textbox  [Resolvido]

Mensagempor sumoner80 » Ter Fev 18, 2020 10:06 pm

Olá Boa noite a todos ! Primeiramente agradecer o klarc28 que sempre está me ajudando e ajudando outras pessoas no fórum obrigado mesmo.

Vamos lá

Tenho os seguintes códigos
Código: Selecionar todos
Private Sub txt_contato_Change()
On Error GoTo erro_texto
    Me.txt_contato = CInt(Me.txt_contato)
erro_texto:
    If Err Then
    Me.txt_contato = Empty
    MsgBox "Digite somente algarismos", 16, "Erro de informação"
    txt_contato.SetFocus
    End If
End Sub
Private Sub txt_contato_KeyPress(ByVal keyascii As MSForms.ReturnInteger)
    'Limita a Quantidade de números
    txt_contato.MaxLength = 15
    'Formato (xx) xxxxx-xxxx
    If Len(txt_contato) = 0 Then
        txt_contato.Text = "("
    End If
    If Len(txt_contato) = 3 Then
        txt_contato.Text = txt_contato & ") "
    End If
    If Len(txt_contato) = 10 Then
        txt_contato.Text = txt_contato & "-"
    End If

End Sub


O primeiro que tem o tratamento de Erro não sei muito o que está fazendo pois foi meu gerente quem fez, pois pedi pra que ele me ajudase a bloquear a caixa de texto txt_contato quando o usuário digitase algo que não fosse números.
Porem tem um problema o segundo código que eu fiz a seguir do dele está formatando a caixa de texto txt_contato para que ela fique (xx)xxxxx-xxxx. e como no código dele tem a seguinte linha Me.txt_contato = CInt(Me.txt_contato) mesmo que o usuario digite número ele já retorna o erro pois o primeiro item na formatação já começa com as ().

minha dúvida é teria como eu unificar esses 2 códigos em 1 fazendo que mantenha o tratamento para quando o Usuário digitar algo que não seja letra já retorne a msgbox em seguida limpe a caixa e permaneça na txt_contato não vá para a próxima caixa de texto, mais que permita conforme o usuário for digitando os números ele seja formatado como no segundo código ?

Desde já obrigado !
"No que diz respeito ao empenho, ao compromisso, ao esforço, à dedicação, não existe meio termo. Ou você faz uma coisa bem feita ou não faz..." - Ayrton Senna
Avatar do usuário
sumoner80
Membro
Membro
 
Mensagens: 15
Registrado em: Sex Fev 07, 2020 10:21 pm
Has thanked: 5 times
Have thanks: 0 time

{ SO_SELECT }

Re: Formatando textbox

Mensagempor EdsonBR » Qua Fev 19, 2020 8:44 am

Bom dia, @sumoner80!

Primeiramente minha sugestão seria tirar o MaxLength de dentro do evento KeyPress pois desperdiça muito recurso desnecessariamente: essa propriedade só precisa ser setada uma única vez e não a cada pressionamento de tecla. Então sugiro colocá-la no Initialize do próprio UserForm, junto com os demais códigos de inicialização:
Código: Selecionar todos
Private Sub UserForm_Initialize()
   '...
   txt_contato.MaxLength = 15
   '...
End Sub

E no evento KeyPress poderia usar algo semelhante a isso:
Código: Selecionar todos
Private Sub txt_contato_KeyPress(ByVal KeyAscii As MSForms.ReturnInteger)
   If Not IsNumeric(Chr(KeyAscii)) Then
     MsgBox "Digite somente algarismos", 16, "Erro de informação"
     KeyAscii = vbEmpty
     Exit Sub
   End If
   Select Case Len(txt_contato)
     Case 0: txt_contato = "("
     Case 3: txt_contato = txt_contato & ")"
     Case 9: txt_contato = txt_contato & "-"
   End Select
End Sub

Agora sim pode eliminar aquele código do evento Change.
Imagem

For this post the author EdsonBR thanked:
sumoner80 (Qui Fev 20, 2020 8:55 am)
Avatar do usuário
EdsonBR
Membro
Membro
 
Mensagens: 676
Registrado em: Qui Nov 05, 2015 11:43 pm
Localização: Joinville, SC
Has thanked: 147 times
Have thanks: 442 times

Re: Formatando textbox

Mensagempor sumoner80 » Qui Fev 20, 2020 8:55 am

Bom dia Edson !
Show de bola, muito obrigado pela explicação e pelos códigos vou fazer a aplicação. E retorno um feedback são 9 caixa de texto e vou aplicar esse conceito em todas dando tudo certo marco o tópico como resolvido, novamente obrigado!
"No que diz respeito ao empenho, ao compromisso, ao esforço, à dedicação, não existe meio termo. Ou você faz uma coisa bem feita ou não faz..." - Ayrton Senna
Avatar do usuário
sumoner80
Membro
Membro
 
Mensagens: 15
Registrado em: Sex Fev 07, 2020 10:21 pm
Has thanked: 5 times
Have thanks: 0 time


Voltar para VBA & Macros

Quem está online

Usuários navegando neste fórum: Google [Bot], MSN [Bot] e 6 visitantes