|
Responder
|
| Autor | |
GOOO
Asiduo
Unido: 08/Mayo/2012 Localización: Guatemala Estado: Sin conexión Puntos: 358 |
Tema: Subformularios en control FichaEnviado: 23/Octubre/2024 a las 22:48 |
|
Buen día.
Trataré de explicar mi consulta. Tengo un formulario (principal) al que le tengo 1 control de ficha con 9 pestañas y en cada pestaña 9 subformularios desconectados. Tanto las pestañas como los subformularios está ocultos. Tengo también, botones de comando que al clicarlos me hace visible la primera pestaña oculta con su respectivo subformulario; y carga en el subformulario con SourceObject el formulario del módulo que necesito mostrar, [lo que simula digamos un navegador]. En cada formulario [módulo] tengo un botón de cerrar, que prácticamente manda el foco al formulario principal, me oculta el subformulario actual donde está el botón de cerrar y su respectiva pestaña. Para lo cual me apoyo con la siguiente función publica. "Ver mas abajo" El problema radica en que a veces me lanza un error donde dice: Se ha producido el error '2467' en tiempo de ejecución: La expresión que ha especificado hace referencia a un objecto que está cerrado o que no existe. Específicamente en esta línea: If ctl.Form.Name = subForm.Name Then en ctl.Form.Name. Public Function ObtenerPaginaSubformulario(subForm As Form) As String 'On Error Resume Next Dim sForm As Form Dim tabControl As Control Dim tabPage As Page Dim ctl As Control ' Asume que el formulario principal se llama "_Principal" Set sForm = Forms("_Principal") ' Recorre los controles ficha para encontrar la página que contiene el subformulario For Each tabControl In sForm.Controls If TypeOf tabControl Is tabControl Then For Each tabPage In tabControl.Pages For Each ctl In tabPage.Controls If TypeOf ctl Is subForm Then If ctl.Form.Name = subForm.Name Then ObtenerPaginaSubformulario = tabPage.Name Exit Function End If End If Next ctl Next tabPage End If Next tabControl ObtenerPaginaSubformulario = "No está contenido en una página." End Function ¿Alguna sugerencia o alternativa?. Bueno si se puede entender. ![]() Nota: ¿Cómo puedo subir una imagen? |
|
|
Viendo se aprende y practicando se mejora
|
|
![]() |
|
mounir
Colaborador
Unido: 09/Febrero/2009 Localización: Asturias-España Estado: Sin conexión Puntos: 6521 |
Enviado: 24/Octubre/2024 a las 09:55 |
|
Hola!
Podría utilizar la instrucción "On Error Resume Next" antes de la "If ctl.Form.Name = subForm.Name Then". Espero que te sirva. Editado por mounir - 24/Octubre/2024 a las 09:56 |
|
|
Un Saludo.
|
|
![]() |
|
happy
Ver perfil usuario
Enviar mensaje privado
Ver los mensajes del usuario
Visite la página de los usuarios
Añadir a la lista de amigos
Moderador
Unido: 29/Enero/2005 Localización: España Estado: Sin conexión Puntos: 3200 |
Enviado: 24/Octubre/2024 a las 16:15 |
|
Hola, si te sale ese error seguramente es porque en el momento en que consultas alguno de esos subformularios todavía no se le ha asignado la propiedad SourceObject, con lo que la propiedad .Form del subformulario no se ha creado y tampoco puedes extraer de ahí la propiedad .Name
No sé si me he sabido explicar bien ...
|
|
|
Saludos,
Juan M. Afan de Ribera |
|
![]() |
|
GOOO
Asiduo
Unido: 08/Mayo/2012 Localización: Guatemala Estado: Sin conexión Puntos: 358 |
Enviado: 24/Octubre/2024 a las 22:32 |
|
Gracias por sus respuestas.
mounir: pues lo de colocar "On Error", simplemente no me deja cerrar el formulario. SourceObject, pero se tomó en cuenta. happy: el botón para "cerrar" lo llamo desde el subformulario cargado. con unos ajustes, hice las modificaciones al código, al parecer cumple lo que se necesita. Public Function ObtenerPaginaSubformulario(subForm As Form) As String Dim parentForm As Form Dim ctrl As Control Dim nombreControl As String ' Obtener el formulario principal On Error Resume Next Set parentForm = subForm.Parent On Error GoTo 0 ' Verificar si el Parent es un Subformulario If Not parentForm Is Nothing Then If TypeOf parentForm Is SubForm Then Set parentForm = parentForm.Parent End If ' Recorrer los controles del formulario principal para encontrar el subformulario actual For Each ctrl In parentForm.Controls If ctrl.ControlType = acSubform Then ' Comparar el SourceObject del control con el nombre del subformulario If ctrl.SourceObject = subForm.Name Then nombreControl = ctrl.Name Exit For End If End If Next ctrl Else nombreControl = "No se pudo obtener el formulario principal." End If ObtenerPaginaSubformulario = nombreControl End Function Se puece cerrar este tema. |
|
|
Viendo se aprende y practicando se mejora
|
|
![]() |
|
happy
Ver perfil usuario
Enviar mensaje privado
Ver los mensajes del usuario
Visite la página de los usuarios
Añadir a la lista de amigos
Moderador
Unido: 29/Enero/2005 Localización: España Estado: Sin conexión Puntos: 3200 |
Enviado: 25/Octubre/2024 a las 17:41 |
|
"happy: el botón para "cerrar" lo llamo desde el subformulario cargado."
Esto que me dices en realidad no tiene mucho que ver con lo que te explicaba. A lo que me refería es que si te aparecía ese error al realizar el bucle For Each Next ' Recorre los controles ficha para encontrar la página que contiene el subformulario For Each tabControl In sForm.Controls If TypeOf tabControl Is tabControl Then For Each tabPage In tabControl.Pages For Each ctl In tabPage.Controls If TypeOf ctl Is subForm Then ' decias que el error se producía aquí If ctl.Form.Name = subForm.Name Then Esto quiere decir que el subformulario al que se hace referencia en ese ctl.Form.Name en ese momento tiene la propiedad SourceObejct = "", y cuando un subformulario NO tiene asignada esa propiedad, tampoco tiene creada la propiedad .Form. Por eso aparece ese error Si ya lo has solucionado de otra forma, entonces perfecto, pero era para aclarar cómo funcionan los subformularios en Access
|
|
|
Saludos,
Juan M. Afan de Ribera |
|
![]() |
|
GOOO
Asiduo
Unido: 08/Mayo/2012 Localización: Guatemala Estado: Sin conexión Puntos: 358 |
Enviado: 28/Octubre/2024 a las 16:44 |
|
Gracias por la observación.
Podemos cerrar este hilo
|
|
|
Viendo se aprende y practicando se mejora
|
|
![]() |
|
Responder
|
|
|
Tweet
|
| Ir al foro | Permisos de foro ![]() Usted No puede publicar nuevos temas en este foro Usted No puede responder a temas en este foro Usted No puede borrar sus mensajes en este foro Usted No puede editar sus mensajes en este foro Usted No puede crear encuestas en este foro Usted No puede votar en encuestas en este foro |