Restringir ingreso de texto o números en TextBox en Excel
El presente artículo muestra un formulario en el que tenemos 2 TextBoxes: uno para ingresar sólo texto y otro para ingresar sólo números.
Cómo funciona
- Sólo números: aquí utilizamos la función Chr(x), donde especificamos que si el caracter es menor a 48 (0) y mayor a 57 (9) entonces éste deberá reemplazarse con “”, es decir, vacío.
- Sólo texto: aquí utilizamos la función IsText para validar que todo lo que no sea texto se reemplace con “”, es de decir, vacío.
Ver video Permitir sólo texto o números en TextBox de Formulario en Excel VBA
Suscríbete al canal de EXCELeINFO en YouTube para aprender más de Excel y macros.
Código
Los siguientes códigos deberán ir en el Change de cada uno de los TextBoxes
'Validar que sólo se ingresen números (a-z y símbolos) Private Sub txtNumero_Change() Dim Texto As Variant Dim Caracter As Variant Dim Largo As Integer On Error Resume Next Texto = Me.txtNumero.Value Largo = Len(Me.txtNumero.Value) For i = 1 To Largo Caracter = Mid(Texto, i, 1) If Caracter <> "" Then If Caracter < Chr(48) Or Caracter > Chr(57) Then Me.txtNumero.Value = Replace(Texto, Caracter, "") Else End If End If Next i On Error GoTo 0 Caracter = 0 Caracter1 = 0 End Sub ' 'Validar que sólo se ingrese texto (0-9) Private Sub txtTexto_Change() Dim Texto As Variant Dim Caracter As Variant Dim Largo As String On Error Resume Next Texto = Me.txtTexto.Value Largo = Len(Me.txtTexto.Value) For i = 1 To Largo Caracter = CInt(Mid(Texto, i, 1)) If Caracter <> "" Then If Not Application.WorksheetFunction.IsText(Caracter) Then Me.txtTexto.Value = Replace(Texto, Caracter, "") Else End If End If Next i On Error GoTo 0 End Sub
Animación del formulario en ejecución
Si te gustó este tutorial por favor regístrate en nuestra Lista de correo y Suscríbete a nuestro canal de YouTube para que estés siempre enterado de lo nuevo que publicamos.
Estimado Sergio,
Gracias por compartir tus conocimientos, quiero preguntarte lo siguiente; tengo un text.box para entrar a un libro con usuario y password, ¿como hago para insertar la macro que indicas ypueda aceptar; Donde dice Usuario solo texto y donde dice Password solo Números, y ademas no me vaya a otra hoja si lo ingresado es incorrecto?, es decir si se equivocan indique Passw erroneo y a la tercera se cierre el libro y no habra nada.
atento a tus comentarios y enseñanza para los novatos como yo.
Sergio
Hola Sergio:
Justamente ayer publiqué un artículo para que los TextBox te limiten a sólo texto o sólo número, lo puedes consultar aquí:
Para la cuestión de que no te deje hacer nada cuando el password es cuestión de definir que cuando se le de en el botón Cerrar realice la intrucción Application.Quit SaveChanges:=False
Disculpa Sergio, pero la segunda instrucción no la entendi, lo que quiero es que si se equivocan 3 veces se cierre excel, y no me habra nada, como ocurre actualmente con el archivo.¿pordrías por favor ser más claro?, desde ya gracias
En estos días voy a publicar precisamente un ejemplo de tu petición. Te mando una versión preliminar para la adecúes a tu archivo.
Aquí la puedes descargar: https://www.dropbox.com/s/jh1rvmb2ovv53be/3%20intentos%20de%20contrase%C3%B1a.xlsm
Sergio, la pagina me dice que el archivo no existe que fue borrado, ¿me lo puedes enviar a mi correo porfa?
Intenta otra vez, pero con este link https://www.dropbox.com/s/cronxgputs8qwn7/EXCELeINFO%203%20intentos%20de%20contrase%C3%B1a.xlsm
esta muy bien tu tutorial muchas gracias pero como hago que me acepte los dos puntos ???
Los dos puntos es el caracter 58, exclúyelo en el IF.
Asi es mas corto y mas efectivo ya que no tiene que validar todos los campos,
sino que valida unicamente el ultimo campo ingresado.
Private Sub TxtCedula_Change()
‘Largo es la cantidad de caracteres ingresados en el TextBox
Dim Largo As Integer
‘Valor es el valor ingresado en el TextBox
Dim valor As Variant
‘caracter toma el ultima caracter ingresado en el TextBox
Dim caracter As Variant
valor = TxtCedula.Value
Largo = Len(valor)
‘Si el valor es mayor a cero indica que ingreso algun dato entonces entra a verificar
‘mas no recorre todo el campo
If (Largo > 0) Then
On Error Resume Next
‘Se captura el ultimo caracter ingresado en la siguiente linea
caracter = Mid(valor, Largo, 1)
‘Si no es numerico entra al if, En caso de ser necesario al contrario (Texto)
‘ se quita el NOT solo para que el campo sea texto y no numerico
If Not Application.WorksheetFunction.IsNumber(CInt(caracter)) Then
‘Se reemplaza el ultimo caracter por espacio
TxtCedula.Value = Replace(valor, caracter, “”)
End If
End If
On Error GoTo 0
End Sub
PD: Disculkpas pero no se como poner esto dentro de un code, si alguien me indica le agradezco, saludos a todos