Imprimir página | Cerrar ventana

Abrir formularios distintos

Impreso de: Foro de Access y VBA
Categoría: Access y VBA
Nombre del foro: Access y VBA
Descripción del foro: Foro de programacion en Access (Con código y sin código)
URL: http://www.mvp-access.com/foro/forum_posts.asp?TID=84505
Fecha de impresión: 20/Septiembre/2019 a las 09:55


Tema: Abrir formularios distintos
Publicado por: Antonalo
Asunto: Abrir formularios distintos
Fecha de publicación: 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





Respuestas:
Publicado por: qwer92
Fecha de publicación: 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:
https://docs.microsoft.com/es-es/office/vba/api/access.form" rel="nofollow - https://docs.microsoft.com/es-es/office/vba/api/access.form


Publicado por: Antonalo
Fecha de publicación: 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


Publicado por: fcoval
Fecha de publicación: 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





Publicado por: Antonalo
Fecha de publicación: 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.




Imprimir página | Cerrar ventana