![]() |
||||||
|
|
||||||
Referenciar controlesControles entre subformulariosHacer referencia a un control que está en un formulario, no en un subformulario, es sencillo. El problema lo solemos tener cuando intentamos acceder a un control que se encuentra en un subformulario, o en un subformulario dentro de otro subformulario. Casi tod@s hemos intentado acceder al principio de esta forma:
= Forms!NombreDelFormulario!NombreDelSubFormulario!NombreDelControl
Y nos hemos topado con que Access no nos muestra lo que queremos, sólo un #nombre o un #error, si lo hacemos desde un formulario, o nos pide los parámetros en una consulta, o nos lanza un error en VBA. ¿Y por qué nos ocurre esto? Porque al principio de nuestro uso con Access no nos han presentado al señor: Control SecundarioCuando insertamos un subformulario dentro de otro formulario, o un subinforme dentro de un informe, no insertamos directamente el objeto deseado, tal y como much@s pensamos. Access nos inserta un objeto Secundario o Nota: Para fastidiar un poco más, Access le da al control Secundario el mismo nombre que el que tiene el subformulario que contiene. Pero claro, si el control Secundario y el formulario que usamos como subformulario tienen el mismo nombre, también tendría que funcionar. Pues no, no funciona por una simple razón: el control Secundario no tiene entre sus propiedades los controles que tiene el subformulario, y por eso no podemos acceder a esos controles tan fácilmente. Tenemos que indicar que queremos acceder al subformulario, y para eso el control Secundario dispone de una propiedad llamada
= Forms!NombreDelFormulario!NombreDelControlSecundario.Form!NombreDelControl
Ya podemos acceder al control y recoger sus propiedades y/o valor, ya que estamos indicando la ruta correcta:
Así, si tenemos un formulario que se llama MiFormulario, y en él tenemos un control Secundario que se llama MiControlSecundario, en el cual hay un formulario de nombre MiFormSecundario, que tiene un cuadro de texto de nombre MiControlDelSubFormulario, la sentencia será similar a la siguiente:
= Forms!MiFormulario!MiControlSecundario.Form!MiControlDelSubformulario
Como podemos apreciar, no indicamos el nombre del subformulario, sólo el del control que alberga. ¿Y si queremos ir al revés? Es decir, desde un control en un subformulario recoger un valor que hay en un control del formulario principal. En este caso, la solución es más sencilla al disponer de: La propiedad ParentLa propiedad
= Parent!MiControl
Lo cual es bastante más sencillo de usar que el chorizo anterior. Nota: Desde un subformulario también podemos acceder al formulario principal mediante la colección Forms. Pues sí, usando la colección |
||||||
|
2008 Patxi Sanz Libro de visitas |