** NORMAS DEL FORO **
Inicio del foro Inicio del foro > Access y VBA > Access y VBA
  Mensajes nuevos Mensajes nuevos RSS - RECORRER CONTROLES DE UN FORMULARIO
  Preguntas frecuentes Preguntas frecuentes  Buscar en el foro   Eventos   Registro Registro  Iniciar sesion Iniciar sesion

Tema cerradoRECORRER CONTROLES DE UN FORMULARIO

 Responder Responder
Autor
Mensaje
PINGUINO Ver desplegable
Nuevo
Nuevo
Avatar

Unido: 20/Enero/2021
Localización: ESPAÑA
Estado: Sin conexión
Puntos: 16
Enlace directo a este mensaje Tema: RECORRER CONTROLES DE UN FORMULARIO
    Enviado: 21/Enero/2021 a las 18:28
Hola Buenas tardes, necesito poder generar un módulo en acces independiente para recorrer todos los controles que existen en todos los formularios de la aplicacion y no se como hacerlo. Tengo un codigo en el evento LOAD, pero solo me sirve para el formulario que estoy cargando en ese momento y yo lo que necesito es recorrer todos los CONTROLES LABEL, de todos los formularios existentes en la base de datos,

ya tengo generado un modulo que me recorre toda la base de datos y me vrea una tabla con los nombres de todos los formularios existentes.

Ahora necesito de cada uno de esos formularios generar una tabla con todos los nombres de los controles LABEL, de cada uno de los formularios

Muchas gracias de antemano
ES SUPERCHULO IR APRENDIENDO ACCES EN ESTE FORO
Arriba
xavi Ver desplegable
Administrador
Administrador
Avatar
Terrassa-BCN

Unido: 10/Mayo/2005
Localización: Catalunya ||||
Estado: Sin conexión
Puntos: 14738
Enlace directo a este mensaje Enviado: 21/Enero/2021 a las 19:11
Hola,

¿Qué tal andamos de VBA?

Necesitas una función en un módulo independiente y una tabla dónde almacenar los resultados
En la función:
- Debes declarar y asignar la base de datos actual
Dim dbs As Object
Set dbs = Application.CurrentProject

- Debes declarar una variable objeto y recorrer la colección de formularios de la base de datos actual
Dim obj As Object
For Each obj In dbs.AllForms

- Debes abrir cada formulario en vista diseño y modo oculto
DoCmd.OpenForm obj.Name, acDesign,,,,acHidden

- Debes declarar una variable Control y recorrer la colección de controles
Dim ctl As Control
For Each ctl In Forms(obj.Name).Controls

- Debes evaluar el tipo de control
If ctl.ControlType = acLabel Then

- Cuando se cumpla la condición, almacenas los datos en la tabla
(ya habria abierto un recordset para rellenarla)

- Al final de la iteración por los controles, se cierra el formulario sin guardar cambios
DoCmd.Close acForm, obj.Name, acSaveNo

- Al final de los formularios "liberas" la variable
Set dbs = nothing


Espero te sirva

Un saludo

Xavi, un minyó de Terrassa

Mi web
Arriba
PINGUINO Ver desplegable
Nuevo
Nuevo
Avatar

Unido: 20/Enero/2021
Localización: ESPAÑA
Estado: Sin conexión
Puntos: 16
Enlace directo a este mensaje Enviado: 21/Enero/2021 a las 19:45
lo voy a probar ahora mismo. 
luego te cuento, muchas gracias
ES SUPERCHULO IR APRENDIENDO ACCES EN ESTE FORO
Arriba
PINGUINO Ver desplegable
Nuevo
Nuevo
Avatar

Unido: 20/Enero/2021
Localización: ESPAÑA
Estado: Sin conexión
Puntos: 16
Enlace directo a este mensaje Enviado: 21/Enero/2021 a las 21:41
HOLA,
esta casi conseguido, me da un error 7784 cd tiene que abrir un subformulario
ES SUPERCHULO IR APRENDIENDO ACCES EN ESTE FORO
Arriba
xavi Ver desplegable
Administrador
Administrador
Avatar
Terrassa-BCN

Unido: 10/Mayo/2005
Localización: Catalunya ||||
Estado: Sin conexión
Puntos: 14738
Enlace directo a este mensaje Enviado: 22/Enero/2021 a las 10:00
Analiza el tipo de control para obviar los subformularios ya que, en realidad, lo analizarás cuando llegues a ese formulario.
Xavi, un minyó de Terrassa

Mi web
Arriba
PINGUINO Ver desplegable
Nuevo
Nuevo
Avatar

Unido: 20/Enero/2021
Localización: ESPAÑA
Estado: Sin conexión
Puntos: 16
Enlace directo a este mensaje Enviado: 22/Enero/2021 a las 11:25
Hola Xavi,
ante todo darte infinitas gracias por tu ayuda, sin ti, no lo hubiera conseguido.

si me puedes indicar como  controlar que es un subformulario te lo agradezco.

Saludos,
Pinguino
ES SUPERCHULO IR APRENDIENDO ACCES EN ESTE FORO
Arriba
xavi Ver desplegable
Administrador
Administrador
Avatar
Terrassa-BCN

Unido: 10/Mayo/2005
Localización: Catalunya ||||
Estado: Sin conexión
Puntos: 14738
Enlace directo a este mensaje Enviado: 22/Enero/2021 a las 11:58
Siguiendo el espíritu del foro que se basa en explicar como hacer las cosas y donde buscar la información, te contaré como enfocar el tema.

Hay un momento del código dónde evalúas el ControlType. Se hace a través de un If porque solo quieres tratar una casuística. Ahora queremos tratar 2: cuando es una etiqueta y cuando es un subformulario. En lugar de utilizar un If (se podría hacer con If..ElseIf pero no me gusta tanto) utilizaríamos una estructura de decisión de tipo Select Case para el ControlType del control en cuestión

Ahora bien, ya sabemos que las etiquetas se reconocen por ControlType = acLabel.

acLabel es el nombre de una constante de Access para no tener que recordar el valor 100. De la misma manera que hay una constante para las etiquetas, existen constantes para cada uno de los distintos tipos de control.

¿Cómo obtener la lista de los controles?
Existen diferentes formas de encontrarla.
- Te sitúas en la palabra ControlType y pulsas F1. Acabas en la página de ayuda dónde, en las observaciones, hay un link a los distintos valores de enumeración. Ahí encontrarás el valor de cada uno de ellos.
- Te sitúas en la palabra acLabel y pulsas Mayusculas+F2 para ver su definición. Se abrirá el examinador de objetos con la colección de constantes que son miembros de la colección Access.AcControlType.

Te explico los 2 métodos por que son la gran fuente de información y que te ahorrará muchas búsquedas.

Con eso seguro que lo encuentras.

Un saludo

Xavi, un minyó de Terrassa

Mi web
Arriba
PINGUINO Ver desplegable
Nuevo
Nuevo
Avatar

Unido: 20/Enero/2021
Localización: ESPAÑA
Estado: Sin conexión
Puntos: 16
Enlace directo a este mensaje Enviado: 22/Enero/2021 a las 17:40
Muchisimas gracias, me ha venido de cine
ES SUPERCHULO IR APRENDIENDO ACCES EN ESTE FORO
Arriba
PINGUINO Ver desplegable
Nuevo
Nuevo
Avatar

Unido: 20/Enero/2021
Localización: ESPAÑA
Estado: Sin conexión
Puntos: 16
Enlace directo a este mensaje Enviado: 31/Enero/2021 a las 12:14
Xavi, muchisimas gracias por tu ayuda, ha sido de gran ayuda.
no me he podido conectar antes, para agradecerte, porque he estado de revisiones médicas oncológicas, pero ya estoy listo otra vez.

Gracias por tu ayuda
ES SUPERCHULO IR APRENDIENDO ACCES EN ESTE FORO
Arriba
 Responder Responder
  Compartir tema   

Ir al foro Permisos de foro Ver desplegable