Vba abrir formulario dependiendo de una condición

Tengo tres formularios distintos que se llaman COLECTIVO 1, COLECTIVO 2 y COLECTIVO 3 y un formulario principal llamado CHEQUEO, dentro de este formulario hay un valor llamado COLECTIVO, necesito como se puede hacer un código por el cual cuando cliquee en el campo COLECTIVO si el valor es 1 se me abra el formulario COLECTIVO 1 y así sucesivamente.

2 Respuestas

Respuesta
1

Deberías hacer tres formularios, y ponerlos como ocultos y superpuestos en el formulario Chequeo. Luego en el evento Después de actualizar del cuadro de texto donde escribes o eliges el número, al que llamaremos TextoA, crear un procedimiento de evento y entre Private Sub y End Sub poner

Select case textoA

case is=1

me.colectivo1.visible=true

me.colectivo2.visible=false

me.colectivo3.visible=false

case is=2

me.colectivo1.visible=false

me.colectivo2.visible=true

me.colectivo3.visible=false

case is=3

me.colectivo1.visible=false

me.colectivo2.visible=false

me.colectivo3.visible=true

end select

Es decir, en función del valor que escribas, se hace visible uno u otro.

Lo he hecho de esta manera y funciona, a ver que te parece...

Private Sub COLECTIVO_Click()

If COLECTIVO = "1" Then
DoCmd.OpenForm "COLECTIVO1"
ElseIf COLECTIVO = "2" Then
DoCmd.OpenForm "COLECTIVO2"
ElseIf COLECTIVO = "3" Then
DoCmd.OpenForm "COLECTIVO3"
ElseIf COLECTIVO = "4" Then
DoCmd.OpenForm "COLECTIVO4"
End If

End Sub

última pregunta...lo prometo. 

Este es el formulario CHEQUEO y al clickar en el campo COLECTIVO se genera el evento que te he indicado, pero el problema es que me muestra todas las solicitudes. Lo que querría es que si clicko por ejemplo en el primero me salga solo la solicitud 3333 y no todas las que contienen el colectivo 2

Lo que has puesto no te lo había dicho yo, ya que creí que querías un formulario, con tres subformularios, pero, la instrucción Docmd. Openform es más extensa. Puedes poner, por ejemplo

Docmd.openform"colectivo1",,,"solicitud=" & me.solicitud & "",,acdialog

Asi, cuando ejecutes la instrucción te abrirá el formulario Colectivo, en vista diálogo, en aquel registro en que el valor de solicitud sea igual al que hay en ese momento en el registro activo(donde haces clic)

Respuesta
1

En el evento "al hacer clic" del campo COLECTIVO pon este código :

Select Case me.colectivo

Case 1: DoCmd.OpenForm "COLECTIVO 1"

Case 2: DoCmd.OpenForm "COLECTIVO 2"

Case 3: DoCmd.OpenForm "COLECTIVO 3"

End Select 

Y listo!

Lo he hecho de esta manera y funciona, a ver que te parece...

Private Sub COLECTIVO_Click()

If COLECTIVO = "1" Then
DoCmd.OpenForm "COLECTIVO1"
ElseIf COLECTIVO = "2" Then
DoCmd.OpenForm "COLECTIVO2"
ElseIf COLECTIVO = "3" Then
DoCmd.OpenForm "COLECTIVO3"
ElseIf COLECTIVO = "4" Then
DoCmd.OpenForm "COLECTIVO4"
End If

End Sub

última pregunta...lo prometo. 

Este es el formulario CHEQUEO y al clickar en el campo COLECTIVO se genera el evento que te he indicado, pero el problema es que me muestra todas las solicitudes. Lo que querría es que si clicko por ejemplo en el primero me salga solo la solicitud 3333 y no todas las que contienen el colectivo 2

Si te funciona, pues perfecto, pero mi forma te implica escribir menos líneas de código y además, usar una estructura Select Case es más rápido que usar Ifs .. Then... ElseIf. Tambien te diría que si los valores de COLECTIVO son números (como parece por la imagen que pones), la comparación al deberías hacer sin las comillas (si pones las comillas estás comparando con un texto, no con un número)

Para responderte a tu duda: si quieres que solo te muestre en el formulario los registros que coinciden con el valor del campo Solicitud, tienes que poner la linea que abre el formulario así:

DoCmd.OpenForm "COLECTIVO 1",,,"Solicitud='" & Me.SOLICITUD & "'"

Aquí lleva comillas simples porque entiendo (por la alineación del campo) que Solicitud es un campo de tipo Texto y no de tipo Número. Lo mismo con el resto de lineas que abren los otros formularios

¡Gracias! ha funcionado perfectamente. De momento voy a dejar el código tal cual lo he puesto, el volumen de información no parece que vaya a ser excesivo, si veo que ralentiza pues guardo como oro en paño tu código para sustituirlo, eso sí le quito las comillas porque efectivamente es un campo numérico (de todas formas con las comillas me funcionaba). Muchísimas gracias.

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas