KEYASCII

USUARIO.EXCLUIDOS 19/04/2004 13:56:30
#21354
Amigos, tenho o cód. abaixo para entrada de numéricos funciona legal só que preciso abilitar o Back Space no mesmo, onde devo mudar?



Private Sub TxtCPF_KeyPress(ByVal KeyAscii As MSForms.ReturnInteger)
Select Case Index
Case Is = 0, 5, 7, 8
Select Case KeyAscii
Case Is = Asc("-"), Asc("."), Asc("0"), Asc("1"), Asc("2"), Asc("3"), Asc("4"), Asc("5"), Asc("6"), Asc("7"), Asc("8"), Asc("9"), Asc("10"), 8
Case Else
MsgBox "Este campo só aceita Números!", vbInformation, "Cadastros Amidy"
KeyAscii = 0
End Select
Case Is = 9, 10, 11, 12, 13, 14
Select Case KeyAscii
Case Is = Asc("-"), Asc("."), Asc("0"), Asc("1"), Asc("2"), Asc("3"), Asc("4"), Asc("5"), Asc("6"), Asc("7"), Asc("8"), Asc("9"), Asc("10"), 8
Case Else
MsgBox "Este campo só aceita Números!", vbInformation, "Cadastros Amidy"
KeyAscii = 0
End Select
End Select
End Sub

USUARIO.EXCLUIDOS 19/04/2004 14:05:51
#21359
Estranho. Você incluiu o 8, que é o Ascii do backspace, e não funcionou? De qualquer maneira, achei seu código muito extenso pra essa rotina, já que você está identificando os números um a um. Já que os códigos para esses números estão em sequência, ficaria mais "elegante" assim:

Select Case KeyAscii
Case 48 To 57 'só aceita de 0 a 9
Case 8 'backspace
Case Else
KeyAscii = 0
End Select
USUARIO.EXCLUIDOS 19/04/2004 14:52:23
#21370
Puxei sua rotina, testei e entendi seu problema: na hora que apaga, o "change" entra em ação, e a formatação fica doida, né? Eu odeio o Change por causa disso.
Eu colocaria a parte de formatação no próximo evento do seu projeto. Por exemplo: depois de formatar a string, você põe foco num botão. Então colocaria a rotina abaixo no GotFocus do botão. Como uma maneira genérica, vou colocar a rotina de formatação no lostfocus do txtcpf:

Private Sub txtcpf_LostFocus()
If Len(txtcpf) 11 Then MsgBox "Tá faltando número!!!!": Exit Sub
If Len(txtcpf) 11 Then MsgBox "Tá sobrando número!!!!": Exit Sub
txtcpf = Left(txtcpf, 3) & "." & Mid(txtcpf, 4, 3) & "." & Mid(txtcpf, 7, 3) & "-" & Right(txtcpf, 2)
End Sub

Não é a melhor saída, pois se o usuário tocar noutro objeto enquanto está digitando o CPF, vai aparecer a mensagem de erro. Colocaria no GotFocus do próximo objeto.
USUARIO.EXCLUIDOS 19/04/2004 15:00:18
#21371
Resposta escolhida
Opa! Mas é claro que tem algumas outras maneiras de se fazer isso. O uso de máscara é sempre citado aqui no site (não sei porque, não gosto), entre outros métodos. Deixe o tópico aberto, porque, como sempre digo: VB e Neston, são mil e uma maneiras de fazer!
Tópico encerrado , respostas não são mais permitidas