Quitar acentos en un textbox

He creado una Base de Datos en Access donde se hace un LogIn con usuarios. Los usuarios no deben contener acentos y quiero que del Nombre y Apellido que carguen se genere un usuario automático basado en las 4 primeras letras del nombre y las 4 primeras del apellido.
Ej: José Gómez generaría 'joségóme'.
Pero como dije, no deben llevar acentos.
¿Cómo logro, al tomar foco el campo 'Usuario' (llamado txtUsuario) para generar ese usuario automático quitándole los acentos y dejando las vocales limpias?

Necesito que reemplace todas las vocales con los acentos más comunes:
Áàâä y la ñ

Importante: el usuario sólo usará minúsculas.
Desde ya muy agradecido.

1 respuesta

Respuesta
1

Yo uso esta función:

'--------------------------------------------------------------------------------------------
'Función para quitar acentos de una cadena de texto
'--------------------------------------------------------------------------------------------
Public Function fncQuitarAcentos(ByVal strNombre As String) As String
    Const conAcentos = "áàäâÁÀÄÂéèëêÉÈËÊíìïîÍÌÏÎóòöôÓÒÖÔúùüûÚÙÜÛýÿÝ"
    Const sinAcentos = "aaaaAAAAeeeeEEEEiiiiIIIIooooOOOOuuuuUUUUyyY"
    Dim i As Integer
    For i = Len(conAcentos) To 1 Step -1
      strNombre = Replace(strNombre, Mid(conAcentos, i, 1), Mid(sinAcentos, i, 1))
    Next
    fncQuitarAcentos = strNombre
End Function

Donde generas el código, le aplicas la función al resultado, por ejemplo:

CodigoUsuario=fncQuitarAcentos(Me.txtUsuario)

Saludos!


Una nueva web de Access, visítanos: http://nksvaccessolutions.com/ 

¡Funciona maravillosamente, como todo lo que propones como solución!
Pero ahora surge otro problema:

'Ana Luz' Gómez genera 'ana gome'.
¿Cómo puedo hacer para que me omita el espacio y tome la siguiente letra del nombre y si no la hay que tome 3 del nombre y 5 del apellido?
O bien, si el caso sea: 'Ana San' que genere 'anasan12" (o sea, complete el usuario con otros caracteres específicos o al azar, si es posible).
Desde ya gracias.

Usa la función Trim() para eliminar los espacios antes de formar el código, o usa la función Replace() para cambiar el espacio por una cadena vacía ("").

Para añadir números aleatorios, investiga la función Rnd()

Una forma que probé y funcionó es: A la cadena de texto para quitar acentos agregué un espacio en blanco y la cadena de caracteres sin acento no añadí nada. Funcionó, pero me parece más preciso lo que me pasas y que queda excelente de eventuales errores.
El que yo usé y es bastante rebuscado y complejo es:

LCTXTVAL = Mid(txtNom, 1, 5) & Mid(txtApe, 1, 5)
VALMAX = 10 - Len(TXTVAL)
If Len(TXTVAL) < 10 Then
     TXTVAL = LCase(TXTVAL & String(VALMAX, "1"))
End If

De esta forma 'Ana Luz' genera 'analuz1111'

Ahora, RND genera aleatorios entre 0 y 1, por lo tanto decimales. ¿Hay alguna forma de quedarme solamente con los decimales o con 1 o 2 dígitos de los decimales?

¡Qué idiota fui! Si he usado el método para generar aleatorios entre cierto margen.

TXTVAL = Trim(Mid(txtNom, 1, 5) & Mid(txtApe, 1, 5))
ALEAT = Int((100 - 1000 + 1) * Rnd + 0)
VALMAX = 10 - Len(TXTVAL)
If Len(TXTVAL) < 10 Then
     TXTVAL = TXTVAL & String(VALMAX, ALEAT)
End If

Ese código me genera el usuario 'analuz----' y el hacerlo absoluto con ABS() me repite sólo el primer dígito del aleatorio ('analuz5555', por ejemplo).

¿Qué puede suceder? Disculpa que no de cierre pero me está dando verdaderos dolores de cabeza, no tengo el conocimiento y me empecino a que funcione.

Fíjate que en el enlace que te pasé pone:

For any given initial seed, the same number sequence is generated because each successive call to the Rnd function uses the previous number as a seed for the next number in the sequence.

Before calling Rnd, use the Randomize statement without an argument to initialize the random-number generator with a seed based on the system timer.

Y no veo que uses Randomize antes de la función Rnd:

TXTVAL = Trim(Mid(txtNom, 1, 5) & Mid(txtApe, 1, 5))
Randomize
ALEAT = Int((100 - 1000 + 1) * Rnd + 0)
VALMAX = 10 - Len(TXTVAL)
If Len(TXTVAL) < 10 Then
     TXTVAL = TXTVAL & String(VALMAX, ALEAT)
End If

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas