Access - Foco Sobre Control

 
Vista:
sin imagen de perfil
Val: 11
Ha disminuido su posición en 4 puestos en Access (en relación al último mes)
Gráfica de Access

Foco Sobre Control

Publicado por Javier (10 intervenciones) el 20/03/2018 12:48:15
Hola y gracias de antemano al que pueda ayudarme.

Estoy intentando poner el foco sobre un textBox con vba. Pero el código se encuentra en un módulo distinto al formulario donde se encuentra el textBox.

Lo he intentado de mil maneras:

Forms(NombreFormulario).Controls(NombreControl).setFocus

He utilizado la instrucción de arriba de muchas formas distintas, con variables, con variables de tipo control,
de tipo objeto.

He utilizado también:

Set variableObjeto = Forms(NombreFormulario).Controls(NombreControl)
variableObjeto .SetFocus

Y en todas las formas me arroja el mismo error:

Se ha producido el error '2018' en tiempo de ejecución: debe guardar el campo antes de ejecutar la acción IrAControl, el método GoToControl o el método SetFocus

Alguien sabe como solucionarlo??

Gracias, saludos.
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 Norberto
Val: 1.094
Oro
Ha mantenido su posición en Access (en relación al último mes)
Gráfica de Access

Foco Sobre Control

Publicado por Norberto (753 intervenciones) el 20/03/2018 14:30:26
Hola.

¿Podrías contarnos algo más? ¿Cómo se llega al código que produce el error?, ¿desde algún otro control del formulario?, si es así, ¿desde qué evento?...

Un saludo,

Norberto.
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
sin imagen de perfil
Val: 11
Ha disminuido su posición en 4 puestos en Access (en relación al último mes)
Gráfica de Access

Foco Sobre Control

Publicado por Javier (10 intervenciones) el 20/03/2018 14:52:15
Hola Norberto, gracias por tu respuesta.

Se activa desde el evento BeforeUpdate de un comboBox.

El evento del comboBox se encuentra en el propio formulario. Este evento llama a una sub rutina, que es la que se encuentra programada en un módulo aparte.

Esta macro recorre la colección de controles que se encuentran en el formulario, eso lo hace sin problema.

Lo que quiero, es que al recorrer los controles, analice el contenido de unos textBox, y si encuentra uno vacío, tiene que escribir en el, el valor de una variable.
El problema es que para analizar el contenido de un textBox, es necesario que ese textBox tenga el foco (O por lo menos eso es lo que yo se. Desconozco si hay otra manera). Es en esa parte donde intento colocar el método SetFocus y donde me arroja el error.

Gracias, saludos.
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
Imágen de perfil de Norberto
Val: 1.094
Oro
Ha mantenido su posición en Access (en relación al último mes)
Gráfica de Access

Foco Sobre Control

Publicado por Norberto (753 intervenciones) el 20/03/2018 15:18:14
Hola de nuevo.

Ese es el problema: el BeforeUpdate. Y no, para ver lo que hay en un control (.Value) no es necesario que tenga el foco. Otra cosa es la propiedad .Text que si lo requiere. Esta última refleja lo que tiene un control antes de que sea actualizada la propiedad .Value. Un ejemplo:

Entras en un cuadro de texto que tiene escrito "Miguel López". La propiedad .Value contiene ese texto y, en el momento en que entras en él la propiedad .Text también. Si vas añadiendo el segundo apellido, R-o-d-r-í-g-u-e-z, .Value mantiene el valor original y .Text va cambiando:
Miguel López
Miguel López_
Miguel López R
Miguel López Ro
...
Miguel López Rodrígu
Miguel López Rodrígue
Miguel López Rodríguez


Es en el momento en que sales del cuadro de texto cuando la propiedad .Value se actualiza y ya no puedes tener acceso a .Text.

Te propongo que recorras el formulario mirando la propiedad .Value. Como esta es la propiedad predeterminada, no es necesario que la menciones. Es decir: Me.Nombre es lo mismo que Me.Nombre.Value.

Otra opción es cambiar el código a AfterUpdate.

Un saludo,

Norberto.
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
sin imagen de perfil
Val: 11
Ha disminuido su posición en 4 puestos en Access (en relación al último mes)
Gráfica de Access

Foco Sobre Control

Publicado por Javier (10 intervenciones) el 20/03/2018 15:40:20
Gracias de nuevo Norberto.

Tienes toda la razón. He cambiado el evento del comboBox a AfterUpdate como tu dices, y funciona perfectamente.

Muchas gracias.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
1
Comentar
Imágen de perfil de Norberto
Val: 1.094
Oro
Ha mantenido su posición en Access (en relación al último mes)
Gráfica de Access

Foco Sobre Control

Publicado por Norberto (753 intervenciones) el 21/03/2018 10:09:51
Ok. No obstante ten en cuenta lo que te he contado de .Value y .Text.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
1
Comentar