Access - Referencias a subformularios por medio de Forms()

 
Vista:

Referencias a subformularios por medio de Forms()

Publicado por Rubén (47 intervenciones) el 30/08/2006 19:50:57
Hola a todos:

En la base de datos en la que trabajo, deseo utilizar un formulario al que llamo desde otros formularios, por ejemplo pulsando en botones o en campos, y que me muestra datos filtrados según el registro activo de esos formularios de origen. Esto lo realizo por medio de código con instrucciones del tipo:
"DoCmd.OpenForm stDocName, acFormDS, acEdit, stLinkCriteria"

Desde ese mismo formulario, accedo también a campos del formulario que lo ha llamado con referencias hechas por medio de Forms(), es decir, algo como:
"Forms(nombre_formulario_origen)!NombreControl"

...siendo nombre_formulario_origen una variable declarada como pública.

El sistema funciona perfectamente, excepto cuando ese formulario origen es, a su vez, un subformulario.

Según la ayuda de Access, la sintaxis para referirse a un control o un campo de un subformulario es de la forma (sabiendo, a la hora de escribir el código, el nombre de ambos):

Forms!FormularioPrincipal.Subformulario!NombreControl

Sin embargo, no sé cómo hacer el equivalente con Forms(), que en permite establecer el nombre en tiempo de ejecución. Si le incluyo sólo el nombre del subformulario, obtengo un error de código 2450 que me dice que no puede encontrar el formulario.

Si intento agregarle a ese nombre el del formulario principal del que depende, creando una cadena del tipo "Formulario.Subformulario", también obtengo el mismo error.

¿Sabría alguien decirme cómo es la forma correcta de proceder? No puedo emplear en el código la referencia directa "Forms!FormularioPrincipal.Subformulario!NombreControl", porque el formulario llamante no es siempre el mismo...

Un saludo y gracias anticipadas,

Rubén
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 Alejandro

Referenciar controles de un subformulario con Forms()

Publicado por Alejandro (4142 intervenciones) el 24/07/2023 23:06:01
Cuando deseas referenciar controles de un subformulario utilizando la función `Forms()` en Access, es importante tener en cuenta la jerarquía de nombres adecuada para asegurarte de que estás accediendo al control correcto. Puedes utilizar la propiedad `Parent` del subformulario para obtener el nombre del formulario principal que contiene el subformulario y luego concatenar ese nombre con el del subformulario y el control deseado.

Aquí tienes la solución para referenciar controles de un subformulario utilizando `Forms()`:

1. Obtener el nombre del formulario principal:
- En el formulario que se llama desde otros formularios, declara una variable pública para almacenar el nombre del formulario principal.

1
2
' Declarar variable pública para almacenar el nombre del formulario principal
Public nombre_formulario_origen As String

2. Almacenar el nombre del formulario principal al llamar al formulario:
- Cuando llames al formulario desde otros formularios, asigna el nombre del formulario principal a la variable declarada.

1
2
3
' Llamar al formulario desde otro formulario y asignar el nombre del formulario principal
nombre_formulario_origen = "NombreFormularioPrincipal"
DoCmd.OpenForm "NombreFormularioLlamado", acNormal

3. Referenciar controles de un subformulario en el código del formulario llamado:
- Utiliza la función `Forms()` para referenciar controles de un subformulario en el código del formulario llamado.

1
2
3
4
' Referenciar controles de un subformulario en el formulario llamado
Dim nombre_subformulario As String
nombre_subformulario = "NombreSubformulario"
Me.Controls(nombre_subformulario).Form.Parent.Form.Controls("NombreControl")

Con esta solución, deberías poder acceder correctamente a los controles de un subformulario desde el formulario llamado utilizando `Forms()`. La propiedad `Parent` te permite acceder al formulario principal que contiene el subformulario, y luego puedes concatenar el nombre del subformulario y el control deseado para referenciarlo de forma dinámica.

Espero que esta solución te sea de ayuda. ¡Buena suerte con tu aplicación en Access!
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