Usuário com melhor resposta
Caractér numério em um TextBox

Pergunta
-
Olá Pessoal.
Estou começando a aprender programação.
Estou desenvolvendo um sistema em excel 2007 utilizando o Visual Basic (do próprio excel).
Em uma caixa de texto (TextBox) pretendo estabelecer que ela aceite apenas caracteres numéricos.
Desenvolvi o procedimento abaixo que apresenta erro:
'O código abaixo permite apenas a introdução de dígitos quando o usuário for digitar o número.
Private Sub TextBox1_Change()
Dim caracter As String 'caracter que o usuário insere
Dim código_ascii As Byte 'código ASCII do caracter inserido
Dim comprimento As Integer 'comprimento do texto atual
'OBTENÇÃO DO ÚLTIMO CARACTER INTRODUZIDO
caracter = Right(TextBox1.Text, 1)
'NO INÍCIO A CAIXA ESTA VAZIA, DAÍ A PRÓXIMA INSTRUÇÃO
If caracter = " " Then Exit Sub
'CONVERSÃO CARACTER/CÓDIGO ASCII
código_ascii = Asc(caracter)
'QUAL O COMPRIMENTO ATUAL DO TEXTO?
comprimento = Len(TextBox.Text)
'SE NÃO FOR UM DÍGITO, O ÚLTIMO CARACTER É REMOVIDO DA CAIXA
If código_ascii < 48 Or código_ascii > 57 Then
MsgBox "O campo só aceita caracteres numéricos!", vbInformation
TestBox1.Text = Left(TextBox1.Text, comprimento - 1)
End If
End Sub
Quando se executa, apresenta o seguinte erro:
Se o primeiro caracter digitado não for numérico, é apresentada uma caixa de mensagem que, após
o usuário clicar em "OK", o sistema dá erro, pois a caixa fica vazia.
Alguém poderia me ajudar a eliminar referido erro?Muito Obrigado!
Respostas
-
Olá..
Use este código...
Code SnippetPrivate Sub TextBox1_KeyPress(ByVal KeyAscii As MSForms.ReturnInteger)
If KeyAscii = vbKeyReturn Or KeyAscii = vbKeyBack Then Exit Sub
If KeyAscii < vbKey0 Or KeyAscii > vbKey9 Then
KeyAscii = 0
End If
End SubNão se esqueça de marcar a resposta como respondida..
Até..
Todas as Respostas
-
Boa Noite!
possui um jeito mais fácil!
voce pode usar o evento Onkeypress do textbox, assim cada fez q for digitado vc verifica se não for numero vc anula o evento,
em C# ficaria assim:
if ( Integer.TryParse(e.keychar, out varNum)
{
e.handled = true;
}
a sintaxe no VB seria a seguinte
[Boolean] = Integer.TryParse([String],[Integer])
Qualquer duvida post ai!
Espero ter ajudado!
-
Boa noite Rogers:Muito Obrigado pela sua atenção.Como eu disse, sou iniciante em probramação e entendi que era para implementar o código da seguinte forma, em VB (do Excell):Private Sub txtNumeroProcesso_fraProcesso_KeyPress(ByVal KeyAscii As MSForms.ReturnInteger)[Boolean] = Integer.TryParse([String],[Integer])End SubEntretanto, quando o cursor deixa a linha de programação surge mensagem de erro:- Aparece selecionado a expressão Integer e a mensagem de que há erro de compilação: Era esperado: expressão.Pois é! Não sei resolver isso.Muito Obrigado!Luiz Costa.
-
Boa Noite Luiz!
essa seria a estrutura em C#, a linguagem da qual programo.
e a sintaxe para VB, já para vb do excel não tenho conhecimento.
o metodo "Integer.TryParse" é um metodo que coverte a string em um inteiro, retornando true caso consiga
converter e falso caso nao consiga.
qquer coisa se achar algo posto aqui!
-
-
Olá..
Use este código...
Code SnippetPrivate Sub TextBox1_KeyPress(ByVal KeyAscii As MSForms.ReturnInteger)
If KeyAscii = vbKeyReturn Or KeyAscii = vbKeyBack Then Exit Sub
If KeyAscii < vbKey0 Or KeyAscii > vbKey9 Then
KeyAscii = 0
End If
End SubNão se esqueça de marcar a resposta como respondida..
Até..
-
-
Olá pessoal!!! Sou nova por aqui, e o meu post não é relacionado sobre outro assunto, eu não consegui fazer o post em outro lugar...rsrsrs!! Espero que perdoem a minha ignorância.
Bem... estou com um problema, que tinha se resolvido, não sei como, mais agora ele voltou de novo(muito brava)!!!!
No Microsoft Word qdo vou abrir um arquivo para ler ele aparece essa mensagem:
ARQUIVO DE CONVERSÃO
.WINDOWS(PADRÃO) .MS-DOS .OUTRA CODIFICAÇÃO
Mais nenhuma dessas opções dá para ler o texto...(que nervoso)
%PDF-1.6
%âãÏÓ
175 0 obj
<</Linearized 1/L 541525/O 178/E 53463/N 81/T 537977/H [ 1176 737]>>
endobj
xref
175 44
Aparece isso e um monte de número embaixo....ruuuuuuuummmmmm
ALGUÉM PODE ME AJUDAR???? PLEASE!!!!
AGRADEÇO DESDE DE JÁ!!!!!