Validación en campo de texto de una tabla
Me podrían ayudar como poder colocar una regla de validación a un campo de texto en una tabla para poder colocar solo consonantes. Por ejemplo HCTR MNL HDLG.
2 Respuestas
Si los datos los metes a través de un formulario, y no te quieres calentar la cabeza, basta con que en el evento Al bajar una tecla del cuadro de texto que sea crees un procedimiento de evento y entre Private Sub... y End sub lo pongas como
Select Case KeyCode
Case 65, 69, 73, 79, 85, 97, 101, 105, 11, 117
KeyCode = 0
End Select
O sea, que cuando vayas a escribir en ese cuadro de texto y pulses una vocal, sea minúscula o mayúscula no te escribe nada. Si ya quieres tener en cuenta que sean acentuadas o no, con ir cogiendo los números del código ASCII e ir poniéndolos a continuación, listo.
no, me había dado cuenta pero también permite algunos números y signos. Es posible que solo sean consonantes y que la primera letra sea mayúscula y las demás en minúscula y esto que lo realice después de cada espacio. ejemplo Hctr Hdlg Glr
Supongamos que tengo la tabla Copia como en la imagen
Con ella hago un formulario donde voy a "usar" el campoA. Escribo en él, sólo permite consonantes
Cuando pongo el cursor en el siguiente control
Prefiero alargar un poco el código pero es más didáctico. El código del evento al bajar una tecla del cuadro de texto CampoA es
Private Sub CampoA_KeyDown(KeyCode As Integer, Shift As Integer) If KeyCode <= 64 Then KeyCode = 0 ElseIf KeyCode >= 91 And KeyCode <= 96 Then KeyCode = 0 ElseIf KeyCode >= 123 Then KeyCode = 0 ElseIf KeyCode = 65 Or KeyCode = 69 Or KeyCode = 73 Or KeyCode = 79 Or KeyCode = 85 Then KeyCode = 0 ElseIf KeyCode = 97 Or KeyCode = 101 Or KeyCode = 105 Or KeyCode = 111 Or KeyCode = 117 Then KeyCode = 0 End If End Sub
Me explico, si la tecla que pulsas tiene un valor menor ó igual que 64 no hace nada
si está entre 91 y 96 lo mismo, etc.
El código del evento Después de actualizar del cuadro de texto campoa es
Private Sub CampoA_AfterUpdate() CampoA = StrConv([CampoA], vbProperCase) End Sub
Es decir, que ponga la primera letra en mayúsculas
Julián, el código mejoro bastante, pero igual puedo colocar números y no me funciona la tecla espaciadora, ni enter, y tampoco puedo borrar lo que e puesto. De seguro estoy haciendo algo mal pero no se que es
Lo de los números es imposible. Mira en la imagen, el código ASCII del 5, por ejemplo es
Es 53, que entra dentro de <=64
Por otro lado, si para borrar usas la tecla retroceso, que su valor es 8, tendrías que poner la instrucción como
Private Sub CampoA_KeyDown(KeyCode As Integer, Shift As Integer) If KeyCode <= 7 Then KeyCode = 0 ElseIf KeyCode > 8 And KeyCode <= 64 Then KeyCode = 0 ElseIf KeyCode >= 91 And KeyCode <= 96 Then KeyCode = 0 ElseIf KeyCode >= 123 Then KeyCode = 0 ElseIf KeyCode = 65 Or KeyCode = 69 Or KeyCode = 73 Or KeyCode = 79 Or KeyCode = 85 Then KeyCode = 0 ElseIf KeyCode = 97 Or KeyCode = 101 Or KeyCode = 105 Or KeyCode = 111 Or KeyCode = 117 Then KeyCode = 0 End If End Sub
De todas formas, si quieres, repito, si quieres mándame un mensaje(sólo el mensaje) a [email protected] y te mando un ejemplo, que es como se ve mejor.
Si lo haces, en el asunto del mensaje pon tu alias Hector Manuel, ya que si no sé quien me escribe ni los abro.
Ya pude ver el ejemplo que me envío a mi correo, pero igual me deja colocar números y algunos símbolos. Trate de buscar unos códigos y agregarlos, como el código del espacio en blanco y desplazamiento para ambos lados, pero no se porque me siguen apreciando números y algunos signos. Igual agradezco la paciencia por ayudarme. Seguiré buscando algunos códigos Ascii para ver como puedo solucionarlo. Muchas gracias.
No sé como será tu ordenador, pero todos, absolutamente todos, los ordenadores del mundo trabajan en código ASCIII. Y no puede ser que le digas que si pulsa el 3 por ejemplo, su valor sea igual a 0 y que cuando lo pulses en el cuadro de texto te ponga ese número. ¿En el ejemplo que te envié te lo permite?
Siento no poder poner aquí un vídeo que demuestra que no lo hace, así que te lo mando al correo.
- Compartir respuesta
La respuesta que le de dan no sirve porque acepta también otros caracteres como números y símbolos, por ejemplo. PrtswTR97881 ¿'.-,.
Observe este formulario:
Le preparé 2 procedimientos, uno que solo acepta letras consonantes mayúsculas, este es el código. No acepta ningún otro carácter y va en el evento Al presionar una tecla.
Este otro solo acepta consonantes minúsculas o mayúsculas. No acepta ningún otro carácter y va en el evento Al presionar una tecla.
Para que los eventos respondan tiene que configurar el formulario en Propiedades, Eventos, Tecla de vista previa en SI, como muestra la figura.
Coloque el primer codito que indica Eduardo y no hace ningún filtro, me deja ingresar cualquier letra y caracter y eso que también coloque en SI el evento (tecla de vista previa) en el formulario. Asi ahora probare el segundo código para ver como funciona.
Para poner la primera letra en mayúscula utilice la función StrConv() como le explican en el evento Después de actualizar del control, pero no se complique con tanto ElseIf. Para este caso es más practico el evento Al presionar una tecla KeyPress que KeyDown, el cual tiene más uso en detectar combinación de teclas especiales, por ejemplo CTRL, ALT y teclas de navegación.
Ya corregí
el código y la Tecla de vista previa, ya la tenia en Si como me indicaba anteriormente, pero me deja poner vocales y no me deja avanzar con el espaciador
Si, eso era, pero no puedo separar las letras con el espaciador. Como lo puedo hacer. Escribo Hctrmnl y debería poder escribir Hctr Mnl
Si efectivamente faltaba vbKeySpace por esto no permite la barra espaciadora. Debe quedar así:
Este código va convirtiendo las consonantes a mayúsculas, no acepta las vocales, si quiere que deje la primera letra de cada grupo en mayúscula, ingrese este código en el evento Después de actualizar del campo texto, sería algo como:
Me.Texto0 = StrConv(Me.Texto0, vbProperCase)
En donde Texto0 es el nombre de su campo de texto.
Estuve probando el código que le dan y no funciona lo siguiente:
- Barra espaciadora
- Tecla Suprimir
- Teclas de desplazamiento (Flechas izquierda y derecha)
- Tecla Enter
Como quien dice tendría que llenarse de ElseIf, ya es de su elección cual ejemplo toma.
Ya agregue el código en el recuadro y funciona a la perfección. El otro código después de actualizar ya lo tenia agregado. Agradezco su paciencia y ayuda. Muchas gracias.
si tuviera que crear un texbox adicional que ingrese letras y números que tendría que agregarle al código que me envió?
Este es el código para controlar el ingreso de letras (todo el abecedario) y números del 0 al 9.
Código del evento Al presionar una tecla:
Observe que es muy parecido al código que le suministré, solo adicioné una línea y retiré la excepción de las vocales, si las quiere excluir adicione el código al final como está en anterior ejemplo. Imagínese si utilizara KeyDown cuántas líneas y ElseIF tendríamos, pero hay otros que insisten en lo que no sirve. Le recomiendo que conserve este código tiene bastante utilidad, lo utilizo en todos mis formularios.
Tengo una duda, me toco escribir letras que contemplan la Ñ, pero no pude colocarla, me faltara algo que hacer para agregarla?
Escríbame a [email protected] y le envío el ejemplo, tengo problemas por TodoExpertos.
Si quiere algo más completo y con acentos:
Este es el código:
Con esto queda demostrado que KEYDOWN no se debe utilizar en este caso y doy por terminada las respuestas a su consulta.
Me alegro le haya servido, conserve el código le servirá para hacer validaciones, en otra oportunidad le enseño el código para que acepte solo números con la coma (,) y el punto (.) Y más.
Solo le recomiendo antes de valorar una respuesta tómese el tiempo en probar la solución que le dan, si esta cumple con sus expectativas, mire el caso de esta pregunta tiene 2 votos positivos y esta valorada como excelente, la realidad es que está lejos de ser una solución a la pregunta. Algunos responden como si esto fuera una competencia y no prueban desde diferentes puntos de vista la respuesta que están ofreciendo, por lo regular siempre pruebo el código, aunque se dan casos que no es una solución y esto se debe a que haya entendido mal la pregunta.
- Compartir respuesta