** NORMAS DEL FORO **
Inicio del foro Inicio del foro > Access y VBA > Access y VBA
  Mensajes nuevos Mensajes nuevos RSS - Abrir formularios distintos
  Preguntas frecuentes Preguntas frecuentes  Buscar en el foro   Eventos   Registro Registro  Iniciar sesion Iniciar sesion

Tema cerradoAbrir formularios distintos

 Responder Responder
Autor
Mensaje
Antonalo Ver desplegable
Asiduo
Asiduo
Avatar

Unido: 06/Noviembre/2009
Localización: España
Estado: Sin conexión
Puntos: 388
Enlace directo a este mensaje Tema: Abrir formularios distintos
    Enviado: 21/Mayo/2019 a las 16:59
Hola 

Tengo una Tabla llamada GRUPOS  con campos IdGrupo, TipoGrupo

Tengo dos formularios basados en esa tabla: GRUPOS y COMUNIDADES

 GRUPOS es para los registros que no sean de TipoGrupo = "Comunidad"
 COMUNIDADES es para los de TipoGrupo = "Comunidad"

En un tercer formulario, he incluido los campos IdGrupo, TipoGrupo y un control, CboIdGrupo que cuando haga doble clic pretendo que se me abra el formulario  COMUNIDADES  o GRUPOS dependiendo si en el campo TipoGrupo pone "Comunidad" u otra cosa.

He escrito un código que funciona pero no me gusta, creo que se puede hacer mejor:

Private Sub CboIdGrupo_DblClick(Cancel As Integer)
    If Me.TipoGrupo = "Comunidad" Then
    DoCmd.OpenForm "COMUNIDADES"
    
        With Forms!COMUNIDADES
            .RecordsetClone.FindFirst "IdGrupo =" & Me.IdGrupo
            .Bookmark = .RecordsetClone.Bookmark
        End With
    
    Else
    DoCmd.OpenForm "GRUPOS"
    
        With Forms!GRUPOS
            .RecordsetClone.FindFirst "IdGrupo =" & Me.IdGrupo
            .Bookmark = .RecordsetClone.Bookmark
        End With
    End If
End Sub


Como veis, el código se repite dos veces casi idéntico y eso es lo que no me gusta, preferiría algo asi:


Private Sub LbAbrirGrupo_Click()
Dim Formulario As String

 Formulario = IIf(Me.TipoGrupo = "Comunidad", "COMUNIDADES", "GRUPOS")

   DoCmd.OpenForm Formulario


    With Forms! & Formulario
       .RecordsetClone.FindFirst "IdGrupo =" & Me.IdGrupo
       .Bookmark = .RecordsetClone.Bookmark
    End With

End Sub

Pero lo de   With Forms! & Formulario no funciona.

he intentado definir Formulario as form, pero no se como asociarle un valor u otro, lo que he intentado no sirve.

La idea es definir una variable que tome el valor de uno u otro formulario y luego que lo abra y que busque el registro  de IdGrupò con el FindFirst


Arriba
qwer92 Ver desplegable
Habitual
Habitual
Avatar

Unido: 10/Noviembre/2011
Localización: Barcelona
Estado: Sin conexión
Puntos: 123
Enlace directo a este mensaje Enviado: 21/Mayo/2019 a las 17:25
Tienes que utilizar otro formato de referencia al formulario, donde le puedas pasar un string:
Forms(Formulario)

Aquí estan todos los formatos:


Editado por qwer92 - 21/Mayo/2019 a las 17:26
Arriba
Antonalo Ver desplegable
Asiduo
Asiduo
Avatar

Unido: 06/Noviembre/2009
Localización: España
Estado: Sin conexión
Puntos: 388
Enlace directo a este mensaje Enviado: 21/Mayo/2019 a las 18:34
Gracias qwer92

con lo que he leído en tu enlace, he empezado a hacer esto:

Dim Formulario As Form
Dim Grupo As String

 Grupo = IIf(Me.TipoGrupo = "Comunidad", "COMUNIDADES", "GRUPOS")



El problema es que ahora no sé como seguir porque los intentos de:

set Formulario =AllForms(Grupo), o simplemente
set Formulario = Forms!Grupo 

siguen dando error. No sé como hacer para que Formulario tome el valor asignado a Grupo
Arriba
fcoval Ver desplegable
Habitual
Habitual


Unido: 19/Enero/2013
Estado: Sin conexión
Puntos: 132
Enlace directo a este mensaje Enviado: 21/Mayo/2019 a las 20:28
Publicado originalmente por Antonalo Antonalo escribió:

Gracias qwer92

con lo que he leído en tu enlace, he empezado a hacer esto:

Dim Formulario As Form
Dim Grupo As String

 Grupo = IIf(Me.TipoGrupo = "Comunidad", "COMUNIDADES", "GRUPOS")



El problema es que ahora no sé como seguir porque los intentos de:

set Formulario =AllForms(Grupo), o simplemente
set Formulario = Forms!Grupo 

siguen dando error. No sé como hacer para que Formulario tome el valor asignado a Grupo





Cita Has probado asi:

Dim frmFormulario As Form

Grupo = IIf(Me.TipoGrupo = "Comunidad", "COMUNIDADES", "GRUPOS")

DoCmd.OpenForm Grupo

Set frmFormulario = Forms(Grupo)

    With frmFormulario
      '---
    End With



Arriba
Antonalo Ver desplegable
Asiduo
Asiduo
Avatar

Unido: 06/Noviembre/2009
Localización: España
Estado: Sin conexión
Puntos: 388
Enlace directo a este mensaje Enviado: 22/Mayo/2019 a las 10:35
Hola Fcoval

Pues si que lo había intentado de esa manera y de otras pero tu comentario me ha dado la clave del error

Yo hacia:

 Grupo = IIf(Me.TipoGrupo = "Comunidad", "COMUNIDADES", "GRUPOS")

Set Formulario = Forms(Grupo)
DoCmd.OpenForm Grupo

Y hay que hacer:


 Grupo = IIf(Me.TipoGrupo = "Comunidad", "COMUNIDADES", "GRUPOS")
DoCmd.OpenForm Grupo
Set Formulario = Forms(Grupo)

Es decir, que el orden de las líneas es distinto , mi manía de definir primero todo es lo que me estaba fallando siempre y no me daba cuenta que había que abrir el formulario primero.


muchas gracias por las dos respuestas, las dos me han ayudado, y una cosa más que sé. 

Podéis cerrar.

Arriba
 Responder Responder
  Compartir tema   

Ir al foro Permisos de foro Ver desplegable