none
Caractér numério em um TextBox RRS feed

  • 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!
    segunda-feira, 26 de janeiro de 2009 21:44

Respostas

  • Olá..

    Use este código...

     

    Code Snippet

    Private 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 Sub

     

     

    Não se esqueça de marcar a resposta como respondida..

    Até..

    terça-feira, 27 de janeiro de 2009 19:20

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!

    segunda-feira, 26 de janeiro de 2009 21:52
  • 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 Sub

    Entretanto, 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.
    segunda-feira, 26 de janeiro de 2009 22:41
  •  

    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!

     

     

     

    segunda-feira, 26 de janeiro de 2009 23:13
  • Valeu Rogers! Muito Obrigado!
    segunda-feira, 26 de janeiro de 2009 23:26
  • Olá..

    Use este código...

     

    Code Snippet

    Private 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 Sub

     

     

    Não se esqueça de marcar a resposta como respondida..

    Até..

    terça-feira, 27 de janeiro de 2009 19:20
  • Boa Evangelista Lion!

    Muito Obrigado pela resposta.

    Perfeita.

    Até ...
    terça-feira, 27 de janeiro de 2009 22:06
  • 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Á!!!!!

    sábado, 14 de fevereiro de 2009 01:02