MACRO PARA VALIDAR DATOS NÚMERICOS EN UN TEXTBOX

Cuando trabajamos con userform y tenemos que introducir datos a través de un textbox, muchas veces nos encontramos con el problema de como condicionar que el usuario ingrese un tipo de dato concreto y en caso de no hacerlo que el programa no grabe los datos.

Pues bien, os ofrezco una sencilla macro para condicionar este tipo de tarea. Una vez colocada la instrucción en vuestro editor de VBA y visualicéis el userform y el textbox, al introducir cualquier carácter que no sea un número, aparecerá el mensaje “DEBES INTRODUCIR UN VALOR NÚMERICO” y el cuadro de texto se volverá de color rojo.

Private Sub TextBox1_Change()
validar = IsNumeric(TextBox1.Value)
If validar = False Then
MsgBox "DEBES INTRODUCIR UN VALOR NUMÉRICO"
TextBox1.BackColor = &HFF8&
End If
End Sub


La función realmente importante es Validar =IsNumeric (Textbox1. Value) que ofrece la posibilidad de realizar una validación como si estuviésemos trabajando en una hoja Excel con la validación de datos que todos conocemos.

Esta macro se complementa siempre con otra serie de instrucciones tales como:  grabar datos en una hoja de Excel a través de un userform, limpiar datos de un textbox después de grabar datos y muchas otras que ya iré explicando en entradas sucesivas.

Espero que os sea de utilidad.
Saludos 🙂

Anuncios

13 pensamientos en “MACRO PARA VALIDAR DATOS NÚMERICOS EN UN TEXTBOX

  1. Me ha sido de gran ayuda el ejemplo, pero en el caso de que sean mil números por validar, habría alguna manera de especificar un rango de números para no escribir de uno por uno.Mil gracias por la ayuda.Saludos,

    Me gusta

  2. Buenas Anónimo;Pensé que solo era para ese caso concreto 🙂 No hay problema, con una pequeña modificación en el código funcionará sin problema:validarnumero = IsNumeric(TextBox1.Value) And TextBox1.Value >= 1 And TextBox1.Value <= 1000De esta forma, estamos condicionando que el dato a introducir sea numérico y que además esté entre los valores indicados, es decir, el 1 y el 1000 (ambos inclusive). Puedes modificar los tramos en función de tus necesidades.Te dejo enlace al nuevo ejemplo: https://drive.google.com/file/d/0B2MZVcPxjhyPTnYyVzR4V21xM3M/view?usp=sharing

    Me gusta

  3. Hola buenas días, disculpen la molestia, pero estoy haciendo una matriz y dentro de los datos necesito validar el dni, que permita ingresar 8 dígitos y que sólo permita valores numéricos,estoy haciendo con validacion de datos,pero solo permite una condicion.

    Me gusta

  4. Hola, muy buena tu ayuda! Tengo una duda, y es la siguiente. Hago un código similar al tuyo, pero me salta un error. Te comento, hago lo siguiente:
    Dim es_numero As Boolean
    Dim Cantidad As Integer

    Cantidad = FormularioVenta.Cantidad.Value

    es_numero = WorksheetFunction.IsNumber(Cantidad)

    Y luego pregunto si es_numero es true o false. Funciona todo bien hasta el momento en el que lo que coloco en el textbox es un texto, entonces me salta un error diciendo que en el renglon de Cantidad = FormularioVeenta.Cantidad.Value , no coinciden los tipos.

    Te agradecería mucho si podes ayudarme!
    Gracias de antemano,
    Saludos!

    Me gusta

  5. Hola Sebastián,
     
    Eso te sucede porque los datos que tienes en el Text en ese momento no son numéricos, y por lo tanto no coinciden los tipos. Por eso es más sencillo que trabajes con un condicional, si es numero haces la rutina, si no lo es (else) sales del proceso o muestras un mensaje. De esta forma controla el error.
     
    También lo puedes hacer con con On error GOTO y cuando se produzca el error muestras mensaje que solo se admiten datos numéricos. Creo que la primera opción es más sencilla, trabaja con un “if”.
     
    Es lógica que te salga falso cuando introduces un texto en es_numero. Debes realizar un condicional.

    De todas formas, si quieres que lo vea en profundidad, enviame un ejemplo del form con el código y como quieres que se comporte. Saludos

    Me gusta

    • Hola Daniel:

      Solo tendrías que modificar los parámetros de la macro diciendo que valide solo cuando el dato NO es númerico:

      Private Sub TextBox1_Change()
      validar = Not IsNumeric(TextBox1.Value)
      If validar = False Then
      MsgBox "DEBES INTRODUCIR UN VALOR DE TEXTO"
      TextBox1.BackColor = &HFF8&
      End If
      End Sub

      Saludos.

      Me gusta

¿Te ha gustado?. Deja un comentario

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión / Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión / Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión / Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión / Cambiar )

Conectando a %s