Excel Avanzado

Macros, Vba en Excel y muchos ejemplos de nuestro Curso de Excel Avanzado

Excel Avanzado

Validar que solo existan letras y números en un textbox

| 41 comentarios

Primero crearemos un userform el cual tendrá dos textbox, uno de los textbox solo permitirá el ingreso de números y el otro solo permitirá el ingreso de letras.

Userform 1 Validar que solo existan letras y números en un textbox

1) Para validar el ingreso de números en el primer textbox tendremos que introducir el siguiente código relacionado al  evento textbox1.Change:

Private Sub TextBox1_Change()

If Not IsNumeric(TextBox1.Text) And _
TextBox1.Text <> "" Then
Beep
MsgBox "Se debe ingresar solo números"
TextBox1.Text = ""
TextBox1.SetFocus
End If
End Sub

El código indica mediante el condicional  IF, que si lo ingresado en el textbox1 no es un valor numérico y a la vez no se trate del caso en el que el textbox se encuentre vacío  (por ejemplo en caso ingrese un numero y lo borre) borre el carácter ingresado y envié el mensaje “Se debe ingresar solo números a través de un msgbox

2) Para validar el ingreso de text0 en el Segundo textbox tendremos que introducir el siguiente código relacionado evento textbox2.Change:

Private Sub TextBox2_Change()
If IsNumeric(TextBox2) And _
TextBox2.Text <> "" Then
Beep
MsgBox "Se debe ingresar solo Texto"
TextBox2.Text = ""
TextBox2.SetFocus
End If
End Sub

El código indica mediante el condicional  IF, que si lo ingresado en el textbox2  es un valor numérico  borre el carácter ingresado y envié el mensaje “Se debe ingresar solo texto a través de un msgbox

Validar ingreso de numeros y Texto a un Textbox

Elaborado por: Luis Agustin Gaitan Murillo

41 comentarios

  1. Tambien se puede hacer que el TextBox de un formulario solo acepte letras o solo acepte números, deberias usar el evento KeyPress del TexBox en mencion.

  2. Hola a todos un textbox de no permitir símbolos:

    No permitir simbolos

    Private Sub Text1_KeyPress(KeyAscii As Integer)
    If (KeyAscii >= 33) And (KeyAscii = 58) And (KeyAscii = 91) And (KeyAscii = 123) And (KeyAscii <= 126) Then
    MsgBox "Nada de simbolos"
    KeyAscii = 8
    End If
    End Sub

    Espero te sirva, hasta pronto.

    • Tu macro me recordó que también necesito realizar algo similar pero no con un aviso, sino que cada vez que reconozca algún simbolo que no necesito, simplemente sea eliminado (y señalar el espacio, ahora en blanco con un color). Esto porque cuando se envía información de una plataforma a otra el orden de los datos es importante y no debe variar, sino solo ser reemplazado por un valor correcto.

  3. como puedo hacer para validar que un contenido del textbox este entre un margen de 0 a 20 denme un ejemplo porfavor

    • Utilizando un botón para ingresar el número una forma de verificar si el número que se colocó en la caja de texto esta entre 1 y 20 sería:

      Private Sub CommandButton1_Click()
      If Not IsNumeric(TextBox1) Then
      MsgBox "Debe ingresar un número"
      Else
      If Not (TextBox1 >= 0 And TextBox1 <= 20) Then
      MsgBox "Debe ingresar un número entre 0 y 20"
      Else
      MsgBox "Ingreso el valor: " & TextBox1.Value
      End If
      End If
      End Sub

      • tengo el mismo problema, pero resulta que tengo q poner un numero entre 4 y 60, me sale mi mensage de error cuando quiero poner 30, me reconcoe primero el 3 y me salta el error este es mi codigo

        Private Sub TextBox5_TextChanged(sender As Object, e As EventArgs) Handles TextBox5.TextChanged
        If TextBox5.Text = "" Then
        TextBox5.Text = 4
        ElseIf Not IsNumeric(TextBox5.Text) Then
        MsgBox("debe ingresar un numero")
        TextBox5.Text = 4
        ElseIf ((TextBox5.Text) > 60 Or (TextBox5.Text) < 4) Then
        MsgBox("el tiempo debe estar entre 4 y 60")
        TextBox5.Text = 4
        End If
        End Sub

        • Asumo que es por el .text que estas agregando ((TextBox5>60) or (TextBox560) or (Val(TextBox5)<4)). Si no estoy mal el .text toma como texto el dato y no seria comparable numéricamente.

  4. Este ejemplo es para verificar que se ingreso un número entero, sin límite de valor, utilizando un formulario con la caja de texto TexTBox2 y un botón CommandButton1 :

    Private Sub CommandButton1_Click()

    valido = False

    If IsNumeric(TextBox2) Then

    valido = True

    'verificar si se ingresaron caracteres entre 0 y 9
    For i = 1 To Len(TextBox2)
    If (Mid(TextBox2, i, 1)) "." Then ' verificamos caracter por caracter
    Caracter = CInt(Mid(TextBox2, i, 1))
    If Not Caracter "" Then
    valido = False
    End If
    Else
    valido = False
    End If
    Next i

    If valido = True Then
    MsgBox "Ingreso el valor entero: " & TextBox2.Value
    Else
    MsgBox "Debe ingresar un número entero"
    End If
    Else
    MsgBox "Debe ingresar un número entero"
    End If
    End Sub

  5. Profesor
    Para que sirve la instrucción "Beep"?

    Saludos

  6. Profesor
    En el Procedimiento figura la instrucción "Beep", para que sirve dicha instrucción?

    Gracias

  7. Profesor
    Dos consultas:
    1. Qué realiza la instrucción TextBox2.SetFocus, y
    2. De qué depende que se use sólo TextBox o TextBox.Text?

    Gracias

    • Luis,

      1. textbox2.setfocus es para que el cursor esté en el objeto textbox2
      2. TextBox hace referencia unicamente al objeto en en si, es decir llama al objeto TextBox, a diferencia del TextBox.Text que se refiere al contenido del objeto, en este caso texto.

      saludos.

    • 1. Qué realiza la instrucción TextBox2.SetFocus:
      Ubica el cursor en el objeto textbox2, también se dice que coloca el foco en el objeto.

      2. De qué depende que se use sólo TextBox o TextBox.Text?
      TextBox es el objeto, Text es una de sus propiedades, es el texto que se muestra en el objeto TextBox. Por ello, si deseamos asignarle un texto al objeto Textbox debemos asignarle el valor a su propiedad Text de la siguiente manera: TextBox.Text= "Valor"

  8. Es importante la validación de datos, sean numéricos o de texto, para no introducir valores distintos a los solicitados. Por ejemplo si se solicita numero de DNI y se introducen por error letras.

  9. El código del mamigo no es malo pero tampoco es muy bueno
    Private Sub TextBox2_Change()
    If IsNumeric(TextBox2) And _
    TextBox2.Text “” Then
    Beep
    MsgBox “Se debe ingresar solo Texto”
    TextBox2.Text = “”
    TextBox2.SetFocus
    End If
    End Sub

    ¿Porque? porque si entro una letra y sigo con números ME LO PERMITE Y NO DEVERIA PERMITIR NUMEROS EN NINGUN PUESTO

  10. Probé el código de Joao y efectivamente en un textbox de solo números no acepta números en cualquier posición del texto. Gracias a los demés también por el aporte.

  11. Buen ejemplo, muy claro y útil. Es muy importante enmarcar los procedimientos que debe realizar el usuario dentro de un formulario, ya que gracias a este se obtienen los datos de entrada para cualquier procedimiento que se haya diseñado. Este ejemplo muestra claramente como ayudamos al usuario a ingresar información al programa y si esta no es del tipo que debió ingresar le reportamos un mensaje para que ingrese correctamente los datos. En caso no se realizará esto se tendría tal vez reportes de errores en el programa debido a que no se pudo procesar un dato porque no es del tipo adecuado.

  12. Veo que muchas de esas funciones se mejoraron en VB. Net y cuando la hoja Excel desplazará su programación a VB .Net... Sería formidable

  13. Excelente aporte sobre restricciones y validaciones, me sirvio para poder realizar un formulario de matricula donde los textbox para nombres y apellidos solo acepten texto y restringan el ingreso de numeros y tambien simbolos y claro sean de una longitud determinada...muchas gracias

  14. Aplicaciones que encontre con para validar datos es la codificacion de los equipos de una planta concentradora (8 digitos), la cantidad de horas de parada de un equipo, si en mayor a 48 horas, es una falla grave, otro es el codigo del trabajador que reporto, debe ser numerico y es importnate sabe quin reporto.
    La logica no es complicada y puede ser facilmente extraible para ser usada en otro libro.

  15. si quisiera validar varios texbox ? con numeros y texto ?

  16. ¿Qué significa Beep?

  17. Excelente! El detalle hace que se aplique fácilmente!

  18. Es muy útil ya que muestra un mensaje indicando el error correspondiente y así evitar un mal ingreso de datos.

  19. Buen caso de validación para texto y números, para no cometer errores especialmente cuando se trabaja con amplios datos.

  20. Habrá algún código para poner un límite a los datos que se escriban en el formulario? Por ejemplo, que sólo se admitan 8 número.

    Saludos!

  21. Hay alguna forma que luego de escribir todo el dato ya sea número o texto, aparesca la ventana de que no es correcto y no defrente al digitarlo.

    • Hola Claudia,
      Me parece que una forma de que te aparezca una ventana con un mensaje de alerta es validando tu dato directamente en el textbox y ya no en el commandbutton. Aqui te dejo un ejemplo, espero que te sirva

      Private Sub TextBox1_Change()
      If IsNumeric(TextBox1.Text) Then
      x = Cells(Rows.Count, 8).End(xlUp).Row
      Cells(x + 1, 4) = TextBox1
      Else
      Beep
      MsgBox "La edad introducida no es valida", vbCritical, "Aviso"
      End If
      End Sub

  22. ¿Qué debería hacer si quisiera validar un texto conformado por tres letras y dos número? sería como una combinación. Si lo valido con IsNumeric podría aceptar más de 2 números después de letras.

  23. antes que todo, gracias, mi duda oconsulta es la sgte., tengo un listado,
    ejemplo del texto;
    11,12,4,13,36,22
    estos resultados los arroja un calculo,que son puestos en una celda, pero necesito separar cada numero en celdas independientes, como ppodria ser para elegir cada numero que esta separado con comas y ponerlos en celdas independientes, para ocuparlos en otros calculos o datos?.

    ojala me puedan ayudar

  24. buena noches, gracias por lo que puedan ayudarme, soy un principiante en el uso dvbase, tengo un userform el cual lo utilizo para ver los datos relacionados de un codigo con una caja combobox y las cajas textbox para los datos que relaciona el codigo, tengo el la columna de codigo valores alfabeticos y numericos, cuando llamo a ver codigo alfabetico no me trae la informacion relacionada a este pero si es numerico si me trae toda la informacion relacionada al codigo. Cual seria el erros y su solucion?. Gracias de antenamo por su ayuda. Veo varios comentarios y soluciones de los cuales se puede aprehender mucho.

    ae.

  25. necesito delimitar el ingreso de valores en un text box que el minimo sea 1 y el maximo 10 como lo hago???
    por su ayuda gracias

    • Quizá podría emplear algo similar a:

      If Val(TextBox1.Value) > 10 Or Val(TextBox1.Value) < 1 Then

      MsgBox "Se debe ingresar solo números entre 1 y 10 "

      End If

Comments Page 1 of 2
1 2

Deja una respuesta

Los campos requeridos estan marcados con *.