Access - Autocorregir un control de un formulario

   
Vista:

Autocorregir un control de un formulario

Publicado por Carlos (6 intervenciones) el 23/07/2014 11:42:51
Buenas,

Quiero que un control de un formulario que va albergar un DNI haga la validación y, en su caso, la corrección del valor introducido.

Por ejemplo, que si se introduce un DNI sin ceros a la izquierda, los añada; si la letra se escriba en minúscula, la convierta a mayúsculas; si no se introduce letra, la calcule, si el usuario introduce un guión entre los dígitos y la letra, lo elimine, etc.

He creado una función que realiza todo este trabajo y la invoco con el evento BeforeUpdate del control donde almaceno el DNI.

El caso es que en los casos en los que la función me devuelve un DNI corregido, querría que se insertara automáticamente como el valor del control y devolver al usuario al formulario en el que se le muestre el valor corregido en el control para que no tenga más que confirmarlo pulsando Enter, Tab, o moviéndose a otro control. Pero cuando intento cambiar el valor del control, se genera un error de run time. El valor del control no se puede cambiar dentro del evento BeforeUpdate(). Se puede cancelar y volver al valor anterior, pero no sugerir uno distinto.

¿Alguna idea?

Gracias
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
Imágen de perfil de Neckkito

Autocorregir un control de un formulario

Publicado por Neckkito (1104 intervenciones) el 25/07/2014 19:29:20
Hola Carlos:

Prueba utilizando el evento "Al perder el enfoque" del control. Para poder hacer lo que comentas necesitarás realizar un "rebote" de foco. Te pongo un código en abstracto para que lo intentes implementar, a ver si te funciona como quieres (ojo, es en abstracto: entiendo que no tendrás dificultad para adaptarlo):

...
Private Sub...
Dim miDNI as variant
Dim resp as integer
miDNI=me.DNI.value
If isnull(miDni) then exit sub 'Si está en blanco salimos
'Aquí el código que te comuprueba si el DNI introducido es correcto
If esCorrecto=False then 'Si no está bien y lo correcto viene representado por vPropuesta...
resp=msgbox("La propuesta del DNI corregido es " & vPropuesta & ". ¿Confirma la corrección?", _
vbQuestion+vbYesNo,"CORRECCIÓN")
If resp=vbYes then 'Si la confirma...
me.DNI.value= vPropuesta
Else 'Si no la confirma... Aquí es donde hacemos el rebote de foco
me.CualquierControlQueNoSeaElSiguienteAlDNI.setfocus
me.DNI.setfocus
End If
End If
End Sub
...

A ver si puedes adaptar lo anterior y la mecánica es la que necesitabas.

Un saludo,

http://neckkito.siliconproject.com.ar
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

Autocorregir un control de un formulario

Publicado por Carlos (6 intervenciones) el 28/07/2014 12:58:57
¡¡Perfecto!! Funciona tal como quería.

Mil gracias.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar