Como realizar un dialogo con cuadro de opciones

Te planteo mi problema a ver si me sabes ayudar.
He
Creado un formulario para que sirva de diálogo y poder escoger las
opciones con las que abrir un informe. En el diálogo, he creado tres
grupos de opciones, de esta manera:
- Grupo 1: * Opción 1 --> si está activado, me desbloquea un cuadro desplegable.
* Opción 2 --> si está activado, me desbloquea otro cuadro desplegable
distinto.
* Opción 3 --> si está activado, me desbloquea otro cuadro desplegable
distinto.
* Opción 4 --> si está activado, me desbloquea otro cuadro desplegable
distinto.
- Año: * Todos.
* Uno específico --> si está activado, me desbloquea un cuadro desplegable.
- Trimestre: * Todos.
* Uno específico --> si está activado, me desbloquea un cuadro desplegable.

Lo que quería saber es cómo tengo que hacer la macro, o si no es posible
con macro, en visual basic, para establecer los distintos criterios a la
hora de abrir el informe, mediante establecervalor. Por ejemplo, un
criterio del desplegable de la opción 2, de un año concreto (elegido del
desplegable de la opción 2 del año) y un trimestre concreto (elegido
del desplegable de la opción 2 del trimestre). Yo ya lo he realizado sólo para un grupo de opción, pero cuando son tres, no sé cómo hacerlo.

Espero me puedas ayudar y haber sido lo más claro posible.

1 Respuesta

Respuesta
1

Si sabes hacerlo para un grupo de opción, hacerlo para más no es demasiado complicado, sólo tienes que irle añadiendo al filtro las opciones seleccionadas de los otros grupos.

Te he preparado un mini-ejemplo con lo que creo que intentas hacer :

http://www.filebig.net/files/kHTrcCUumB

Lo he programado en visual, que es más versátil que las macros. El código está bastante explicado, pero si necesitas alguna aclaración, aquí me tienes.

Básicamente lo que hace es ir analizando cada grupo de opción, e ir creando el filtro según las opción/opciones marcadas.

Hola, muchas gracias por el ejemplo. Está superbien explicado. Sólo quería pedirte dos cosas más, a ser posible.

En el caso de que, en tu ejemplo, tengas además de vendedor y localidad, por ejemplo, NIF, cómo sería en Visual Basic. Te pregunto esto porque tu lo has programado siguiendo la lógica de que si no es uno, es otro. Yo he intentado hacerlo con if y con select, pero no soy capaz (básicamente, por como no sé lenguaje de Visual Basic, voy dando palos de ciego a ver si funciona).

Y, por otro lado, quería preguntarte como hacer para cerrar el formulario y que el informe te lo maximize y ponga por delante de cualquier otra ventana. Esto viene a colación de que los grupos de opciones van en un formulario en ventana de diálogo, y quiere que me la cierra una vez que esté abierto el informe.

Muchas gracias por todo. Un saludo.

Si tuvieras más campos, ej NIF ( que sería la 3ª opción del grupo), como preguntas, los códigos serían:

Para el Grupo de opción:

Private Sub Grupo1_AfterUpdate()Select Case Me.Grupo1.ValueCase 1Me.cboLocalidad.Visible = TrueMe.cboVendedor.Visible = False

Me.cboNIF.visible = FalseCase 2Me.cboLocalidad.Visible = FalseMe.cboVendedor.Visible = True

Me.cboNIF.visible = False

Case 3

Me.cboLocalidad.Visible = FalseMe.cboVendedor.Visible = FalseMe.cboNIF.visible = TrueEnd SelectEnd Sub

Para el Formulario que filtra(pongo sólo las lineas nuevas):

Private Sub cmdInforme_Click()

...

Dim miNIF as string

...

miNIF = Nz(Me.cboNIF.Value, "") 'Asigamos el valor del combo a miNIF

....

'Evaluamos la primera parte del filtro: Grupo 1Select Case Me.Grupo1.ValueCase 1miFiltro = "[Localidad]='" & miLocalidad & "'" 'Creamos la primera parte del filtroCase 2miFiltro = "[Vendedor]='" & miVendedor & "'" 'Creamos la primera parte del filtroCase 3miFiltro = "[NIF]='" & miNIF & "'" 'Creamos la primera parte del filtroEnd Select

...End Sub

Cambié la parte del código relativa al primer grupo, para hacerlo por medio de un Select Case en vez de con If, que para evaluar más de 3 opciones me parece mejor.

La segunda parte de la pregunta, cambia esto al final:

'Abrimos el Informe en vista preliminar y filtradoDoCmd. Close acForm, Me. NameDoCmd. OpenReport "RVentas", acViewPreview,, miFiltro, acDialog

Gracias, muchas gracias. Se me olvidó decirte que conseguí sacar lo de hacer visible el cuadro combinado. Lo siento por hacerte perder el tiempo.

Al final, para que me funcione el informe me queda así:

Private Sub Comando55_Click()
Dim miud As String
Dim midd As String
Dim mitd As String
Dim micd As String
Dim miAño As String
Dim miTrimestre As String
miud = Nz(Me.udcc.Value, "")
midd = Nz(Me.ddcc.Value, "")
mitd = Nz(Me.tdcc.Value, "")
micd = Nz(Me.cdcc.Value, "")
Select Case Me.Cuadro.Value
Case 1
miFiltro = "[udcc]='" & miud & "'"
Case 2
miFiltro = "[ddcc]='" & midd & " '"
Case 3
miFiltro = "[tdcc]='" & mitd & "'"
Case 4
miFiltro = "[cdcc]='" & micd & "'"
End Select
End If
If Me.Año.Value <> 1 Then
miAño = Me.acc.Value
miFiltro = miFiltro & " AND [Año]='" & miAño & "'"
End If
If Me.Trimestre <> 1 Then
miTrimestre = Me.tcc.Value
miFiltro = miFiltro & " AND [Trimestre]='" & miTrimestre & "'"
End If
DoCmd.Close acForm, Me.Name
DoCmd.OpenReport "04-F Gastos", acViewPreview, , miFiltro
End Sub

Necesito saber donde meter un código para en el caso de que no seleccione nada en el grupo de opción CUADRO, me muestre todos los campos, tal y como se ha hecho en AÑO y TRIMESTRE.

Esta es la última, lo siento de verás. Muchas muchas gracias por tu ayuda y tiempo.

Tienes dos opciones, o le pones una opción que sea "todas", y en el select case le añades esa opción con el valor numérico que tome, o le añades al select case antes del end select:

Case Else

MiFiltro=miFiltro ' Es decir, no filtramos por el grupo de opciones


Recuerda que si quieres que el informe te quede por encima del resto de ventanas, has de añadir , acDialog al final del DoCmd. OpenReport, justo después de miFiltro.

Muchas muchas muchas gracias por la paciencia. Al final, he conseguido que funcione a las mil maravillas. No puedo ponerte una puntuación mayor, que si no, lo haría.

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas