¿Cómo forzar a escribir sin acentos en un textbox de access?

Resulta que no consigo impedir que se introduzcan acentos a la hora de escribir en un textbox.

Es para evitar duplicidades en la introducción de nombres y apellidos. Ya sé que no es muy ortodoxo el método para solucionar las duplicidades pero no se me ocurre otro.

He intentado, en el evento KeyPress, con un

If KeyAscii= 161 Then

KeyAscii = 0

End If

pero nada. No funciona. También he intentado con un

If KeyAscii = 161 Then

KeyAscii = 73          ' (Convertir la í en I) pero tampoco funciona.

End If

No se me ocurre otra cosa. ¿Alguien conoce la solución?

3 respuestas

Respuesta
3

Yo uso otro sistema, que me funciona muy bien en los 4 años que lo llevo usando. Consiste en dejar que el usuario escriba como quiera, y luego, al salir del cuadro de texto, quitarle los acentos.

El proceso es muy sencillo:

1º/ En el evento "Después de actualizar" de cada cuadro de texto en el que quieras impedir los acentos, pones (el código es para un campo llamado Usuario):

Private Sub Usuario_AfterUpdate()
Me.Usuario = fncQuitarAcentos(Nz(Me.Usuario, ""))
End Sub

2º/ Creas un módulo en tu BD y en él pegas este código, que es la función para quitar los acentos:

'--------------------------------------------------------------------------------------------
'Función para quitar acentos de una cadena de texto
'--------------------------------------------------------------------------------------------
Public Function fncQuitarAcentos(ByVal strTexto As String) As String
Const conAcentos = "ÁÀÂÄÃáàâäãÉÈÊËéèêëÍÌÎÏíìîïÓÒÔÖÕóòôöõÚÙÛÜúùûüÝýÿ"
Const sinAcentos = "AAAAAaaaaaEEEEeeeeIIIIiiiiOOOOOoooooUUUUuuuuYyy"
Dim i As Long
Dim lngPos As Long
Dim strCaracter As String * 1
If Len(strTexto) = 0 Then
fncQuitarAcentos = ""
Exit Function
End If
For i = 1 To Len(strTexto)
strCaracter = Mid(strTexto, i, 1)
'comparamos el caracter con la cadena con acentos
lngPos = InStr(1, conAcentos, strCaracter, vbBinaryCompare)
'si se ha encontrado coincidencia ...
If lngPos <> 0 Then
'sustituímos el caracter con el que tiene la misma
'posición en la cadena sin acentos (o sea la letra sin acentos)
strCaracter = Mid(sinAcentos, lngPos, 1)
End If
'... y si no, pues seguimos como si nada
fncQuitarAcentos = fncQuitarAcentos & strCaracter
Next i
End Function

Si no te gusta esa función, por internet hay otras muchas que hacen lo mismo.

Y listo!

Un saludo.


Respuesta
2

En principio lo hacías bien, pero la tecla del acento es la 222 y por otro lado, yo lo pondría en el evento Al bajar una tecla

Private Sub Texto1_KeyDown(KeyCode As Integer, Shift As Integer)
If KeyCode = 222 Then
KeyCode = 0
End If
End Sub

Creo que me he liado con los or y los and y por eso no me salía. Cuando lo consiga  lo expondré para que quede.

Gracias Icue

Pero, tal como lo planteas no necesitas ni and ni or, lo que hace es anular la tecla del ´ acento

¡Gracias! Al final lo he solucionado con un SELECT CASE. El problema estaba en que la página web de la que había sacado los Ascii, está equivocada.

Respuesta
1

Yo, en la línea de lo que dice Sveinbjorn El Rojo dejo que entren lo que quieran y después, en el evento Después de actualizar, llamo a una función que tengo creada:

Function SinAcentos(Paraula As String) As String

'Función que devuelve la Cadena sin los acentos

Paraula = Replace(Paraula, "á", "a")

Paraula = Replace(Paraula, "à", "a")

Paraula = Replace(Paraula, "é", "e")

Paraula = Replace(Paraula, "è", "e")

Paraula = Replace(Paraula, "í", "i")

Paraula = Replace(Paraula, "ó", "o")

Paraula = Replace(Paraula, "ò", "o")

Paraula = Replace(Paraula, "ú", "u")

Paraula = Replace(Paraula, "ü", "u")

Paraula = Replace(Paraula, "Á", "A")

Paraula = Replace(Paraula, "À", "A")

Paraula = Replace(Paraula, "É", "E")

Paraula = Replace(Paraula, "È", "E")

Paraula = Replace(Paraula, "Í", "I")

Paraula = Replace(Paraula, "Ó", "O")

Paraula = Replace(Paraula, "Ò", "O")

Paraula = Replace(Paraula, "Ú", "U")

Paraula = Replace(Paraula, "Ü", "U")

SinAcentos = Paraula

End Function

No se si es muy ortodoxo, pero me funciona.

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas