¿Puedo hacer una macro para un txtbox, de solo texto y que me rechace datos ilegibles?

Soy novato, pero cuando se me mete una cosa por hacer le lucho lo que mas pueda para obtener un buen resultado.

Mi situación es la siguiente

Necesito un textbox o campo de escritura, en el cual quienes traten de ingresar una información ilegible o absurda, este sea rechazado por la macro.

Me explico, supongamos creo un formulario en el cual en un txtbox solicito un apellido o una ciudad y ante un eventual usuario que quiera ingresar datos "inutiles", algo así como ttttttttt o uuuuuuuu, este dato no se acepte.

He pensado en una especie de loop o if anidados que no permita más de tres "consonantes" o vocales seguidas, sin que haya una vocal o consonante que le siga.

Por ejemplo Christhian es un nombre aceptable, ya que es legible en nuestro alfabeto latino ya que despues de la 3a consonante hay una vocal (la "i"), y tal dato sería aceptado.

Pero algo así como sdjklghf no se podria aceptar.

Como dije soy novato, pero me gustaría saber que tipo de ciclo es mejor.

1 Respuesta

Respuesta
1

Te anexo la macro para validar lo siguiente:

- Solo acepta letras, minúsculas o mayúsculas, con acento o sin acento y la ñ y Ñ

- No acepta cualquier otro caracter.

- Lo que hace es validar el texto con el diccionario que tienes instalado.

- Si el nombre no está en el diccionario, envía un mensaje a pantalla.

- Si presionas "Si", quiere decir que aceptas el nombre.

- Si presionas "No", tienes que cambiar el nombre.

Es difícil saber si el nombre capturado es correcto o no, solamente la persona que lo está capturando sabrá si es correcto, por eso se hace la validación con el diccionario instalado, si no existe, se envía un aviso y es responsabilidad de la persona que captura, cambiar o aceptar el nombre.


Del código de la macro revisa lo siguiente:

- Al principio de la macro va una variable globar "salir", esa variable va al principio de todo el código.

- Si ya tienes alguno de los eventos que te estoy enviando deberás agregar el código o sustituir mi código por lo que tú tengas.

- Hice el ejemplo con el textbox1, si tu textbox tiene otro nombre deberás cambiarlo en el código.


Dim salir
'
Private Sub TextBox1_Exit(ByVal Cancel As MSForms.ReturnBoolean)
'Por.Dante Amor
    If salir = 0 Then Exit Sub
    nombre = Application.Proper(TextBox1)
    If Application.CheckSpelling(Word:=nombre) = False Then
        If MsgBox("Es correcto el nombre.", _
            vbQuestion + vbYesNo, "NOMBRE INVÁLIDO") = vbNo Then
            Cancel = True
        End If
    End If
End Sub
'
Private Sub TextBox1_KeyPress(ByVal KeyAscii As MSForms.ReturnInteger)
'Por.Dante Amor
    Select Case KeyAscii
        Case 65 To 90, 97 To 122     'A-Z, a-z
        Case 225, 233, 237, 243, 250 'á é í ó ú
        Case 193, 201, 205, 211, 218 'Á É Í Ó Ú
        Case 32, 241, 209            'barra epaciadora, ñ Ñ
        Case Else: KeyAscii = 0
    End Select
End Sub
'
Private Sub UserForm_Activate()
'Por.Dante Amor
    salir = 1
End Sub
'
Private Sub UserForm_QueryClose(Cancel As Integer, CloseMode As Integer)
'Por.Dante Amor
    salir = CloseMode
End Sub

Saludos.Dante Amor

¡Gracias! Disculpa mi tardanza en responder, había pensado en algo similar pero con una base de datos con los nombres de tipo latino más comunes (incluyendo los de origen extranjero, excepto claro los de origen checo, alemán, suizo o de regiones en donde las consonantes son bastante secuenciales).

Tenía programado eso, pero se me pasó con las actividades rutinarias.

Gracias de todos modos, pero te hago una pregunta, ¿los "case", hacen referencia a los códigos ASCII?

Gracias de nuevo

Sí, los case hace referencia a los códigos ascii y corresponden a las letras

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas