Vídeo recomendado
https://youtu.be/diWPPPhW-9E

Macro para tratar o campo cep (AJUDA)

Dúvidas gerais sobre Excel
derlim30
Colaborador
Colaborador
Mensagens: 34
Registrado em: Qua Mai 20, 2015 1:33 pm

Macro para tratar o campo cep (AJUDA)

Mensagem por derlim30 »

Prezados,

Criei o codigo abaixo para tratar o campo cep, colocando-o no keypress do textbox o codigo funciona, tentei criar uma macro com o codigo e chama-lá no evento keypress mas não funcionou, quem puder me ajudar agradeço.

Derli

If (KeyAscii < 48 Or KeyAscii > 57) Then
If KeyAscii <> 8 Then
If KeyAscii <> 13 Then
KeyAscii = 0
End If
End If
End If
If Len(cep) = 5 Then
cep.Text = cep.Text + "-"
End If


Disable adblock

This site is supported by ads and donations.
If you see this text you are blocking our ads.
Please consider a Donation to support the site.


Avatar do usuário
Mauro Coutinho
Jedi
Jedi
Mensagens: 1561
Registrado em: Sáb Mar 13, 2010 8:10 pm
Localização: São José dos Pinhais - Pr

Re: Macro para tratar o campo cep (AJUDA)

Mensagem por Mauro Coutinho »

Se entendi, você não quer deixar direto no evento e sim uma rotina separada que faça o teste, não sei o porque, pois o ideal é deixar direto e evitar de termos rotinas desnecessárias, mas de qualquer forma veja se é isto, adicionei uma outra forma de verificar a formatação do campo cep :

Código: Selecionar todos

Dim sKeyAsc As Double

Private Sub cep_KeyPress(ByVal KeyAscii As MSForms.ReturnInteger)
          
    sKeyAsc = KeyAscii
    
    Call TestaCep

End Sub

Private Sub TestaCep()
             'Limita a Qde de caracteres
            cep.MaxLength = 9

            If (sKeyAsc < 48 Or sKeyAsc > 57) Then
                If sKeyAsc <> 8 Then
                    If sKeyAsc <> 13 Then
                        sKeyAsc = 0
                    End If
                End If
            End If
            
            If Len(cep) = 5 Then
                cep.Text = cep.Text + "-"
            End If
End Sub


'Esta seria uma outra forma
Private Sub TestaCep_2()
 'Limita a Qde de caracteres
            cep.MaxLength = 9

            Select Case sKeyAsc
                Case 8, 48 To 57 ' BackSpace e numericos
                  If Len(cep) = 5 Or Len(cep) = 10 Then
                    cep.Text = cep.Text & "-"
                    SendKeys "{End}", False
                  End If
               
                Case Else ' o resto é travado
                    sKeyAsc = 0
              End Select
End Sub
[]s


derlim30
Colaborador
Colaborador
Mensagens: 34
Registrado em: Qua Mai 20, 2015 1:33 pm

Re: Macro para tratar o campo cep (AJUDA)

Mensagem por derlim30 »

Oi Mauro

Tal procedimento seria apenas para eliminar linha de codigo já que preciso tratar vários campos numericos em cada useform.

Se colocar esse codigo que vc me enviou num módulo irá funcionar?

Abs


Avatar do usuário
Mauro Coutinho
Jedi
Jedi
Mensagens: 1561
Registrado em: Sáb Mar 13, 2010 8:10 pm
Localização: São José dos Pinhais - Pr

Re: Macro para tratar o campo cep (AJUDA)

Mensagem por Mauro Coutinho »

Pelo que disse em utilizar o mesmo criterio em vários textbox sem ter de escrever várias vezes a mesma rotina, para isto podemos trabalhar com manipulador de eventos usando um Modulo de Classe e WithEvents, observando que WithEvents é válido somente em um módulo de classe.
Para facilitar a compreensão criei um modelo, será mais fácil de entender, no mesmo temos dois userforms com alguns textbox e todos obedecerão o critério definido para o formato tipo CEP aceitando digitação somente de numeros.
Mas veja que qualquer textbox que acrescentar obedecerá as mesmas regras, independente se alterar o nome padrão do controle, pois a rotina trata pelo tipo de controle e não pelo Name.

Faça os testes e veja se seria isto.
Textbox keypres_WithEvents.zip
(22.06 KiB) Baixado 272 vezes
Se for isto, favor colocar o tópico como Resolvido e clicar na mãozinha à direita para agradecer.

[]s


Disable adblock

This site is supported by ads and donations.
If you see this text you are blocking our ads.
Please consider a Donation to support the site.


Responder