Cuadro combinado basado en otro cuadro combinado

Estoy realizando un formulario con filtros para un informe. Estos filtros se escogen de entre tres cuadros combinados. Me gustaría que estuvieran basados entre sí. He conseguido sacar varios, pero hay uno que no soy capaz, y no sé porqué.

Dejo por aquí la base de datos porque copiar el código no tendría sentido. El formulario afectado es 03-E Dialogo Base Imponible, función tcc_Enter (). El que no me funciona es el Case 3, else.

Los cuadros combinados son: Categorías, Año y Trimestre. Ahora mismo, están vinculados Trimestre y Año, pero quiero también con Categoría. Tcc se refiere al cuadro combinado del trimestre; acc, del año; y cc, categoría.

https://www.dropbox.com/s/ivp6va491zr5cpl/Gesti%C3%B3n.mdb?dl=0 

4 Respuestas

Respuesta
1

Dame tu correo para regresarte tu BD

Respuesta
1

Diego: Antes de Profundizar mucho más, sustituye éstas líneas de código por las que tu tienes, ya que para formar el filtro lo debes acumular con " AND "

En el Procedimiento >> Private Sub Etiqueta30_Click()

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 " & "[Trimestre1]='" & MiTrimestre & "'"
End If

Además y debajo de Dim MiTrimestre As String >> Deberias declarar la Variable
Dim MiFiltro As String

Es lo que más salta a la vista, y si no es eso habría que seguir profundizando.

Mis saludos >> Jacinto

Hola, Jacinto. Volvemos a vernos. Como ves, he resuelto lo del filtrado, simplificando un poco, y he limpiado el código de la base de datos. Muchas gracias por contestar. Eso resuelve la duda que tenía planteada en otra pregunta, que ahora procederé a cerrar. Si quieres, antes de hacer nada,, puedes copiar esta respuesta en la pregunta, para que te de mi voto allí. Esta pregunta hacía referencia a cuadros combinados. Un saludo.

Perfecto Diego: Me alegro que al final puedas seguir.

Ya he visto que habías cambiado las consultas que no había por otro código.

Si necesitas algo más me comentas. Mis saludos >> Jacinto

Diego: Supongo que la pregunta a la que te referías es a:

Error de sintaxis en la expresión de la consulta

Me deja abrirla, pero al contestarla me die que la pregunta no existe.

No te preocupes. Mis saludos >> Jacinto

Diego: Las prisas y los aciertos casi nunca van juntos. He repasado el código que te he enviado y dará fallos porque al acumular el Filtro, en ocasiones se va a quedar un " AND " incial, por tanto es mejor añadirlo a Todos y quitarlo al final. De modo que tu Procedimiento completo y modificado debe ser:

Private Sub Etiqueta30_Click()
Dim MiCategoría As String
Dim MiAño As String
Dim MiTrimestre As String
Dim MiFiltro As String
MiFiltro = "" 'Inicializamos el filtro
If Me.Categoría.Value <> 1 Then
        MiCategoría = Me.cc.Value
        MiFiltro = MiFiltro & " AND " & "[Código1]='" & MiCategoría & "'"
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 " & "[Trimestre1]='" & MiTrimestre & "'"
End If
If Me.Trimestre <> 1 And Me.Año.Value <> 1 And Me.Categoría.Value <> 1 Then
            MiCategoría = Me.cc.Value
            MiFiltro = MiFiltro & " AND " & "[Código1]='" & MiCategoría & "'"
            MiAño = Me.acc.Value
            MiFiltro = MiFiltro & "AND [Año]='" & MiAño & "'"
            MiTrimestre = Me.tcc.Value
            MiFiltro = MiFiltro & "AND [Trimestre1]='" & MiTrimestre & "'"
End If
'Quitamos el Primer " AND " si es que lo hubiera
If Len(MiFiltro) > 0 Then
        MiFiltro = Right(MiFilro, Len(MiFiltro) - 4)
End If
If MiFiltro = "" Then
        DoCmd.OpenReport "04-B Base Imponible", acViewPreview
Else
        DoCmd.OpenReport "04-B Base Imponible", acViewPreview, , MiFiltro
End If
If Forms("03-E Dialogo Base Imponible").Año.Value <> 1 Then
    Reports("04-B Base imponible").PieInforme.Visible = False
        Reports("04-B Base imponible").PieCategoría.Visible = True
End If
If Forms("03-E Dialogo Base Imponible").Trimestre.Value <> 1 Then
    Reports("04-B Base imponible").PieAño.Visible = False
    Reports("04-B Base imponible").PieCategoría.Visible = True
End If
DoCmd.Close acForm, Me.Name
End Sub

Ya verás los Cambios. Mis saludos >> Jacinto

Gracias, Julio. ¿Me podrías aconsejar sobre los cuadros combinados de los pregunto? 

Diego: Aunque no soy Julio, pero me has pedido mi opinión sobre cuadros combinados, la verdad es que hay mucha información sobre ello, pero de lo más reciente que yo sepa, puedes mirar en la Web de Neckkito, en éstas dos Páginas y verás varios enfoques de esa cuestión.

http://siliconproject.com.ar/neckkito/index.php/ejemplos-explicados/controles 

Y ésta otra>>

http://siliconproject.com.ar/neckkito/index.php/aportaciones 

Mis saludos >> Jacinto

Respuesta
1

En el diseño del cuadro combinado donde eliges el año, en Origen de la fila añádele la tabla Categorías y lleva a la cuadrícula de diseño el campo Código de la categoría y debajo en Criterios pon

[forms]![03-E Dialogo Base Imponible]![cc]

Así sólo saldrán los años correspondientes a la categoría que has elegido arriba

Eso me vale. Pero ahora una cosa. Pero si selecciona otra categoría, o bien no quiero ninguna categoría, ¿cómo hago para actualizar el nuevo valor? Gracias.

Con poner en el evento después de actualizar de cuadro combinado cc

acc = Null
Acc. Requery

Solucionado, pero te convendría poner también que las opciones se fueran también a null ya que cuando activas Elegir Uno, ya te queda marcada y si cambias de categoría o año, tal como la tienes, debes pulsar Todas para poder volver a marcar Elegir una.

Gracias por la respuesta. Funciona perfectamente. Lo que no termino de ver es lo de las opciones. ¿Qué evento tendría que utilizar? ¿El código sería el mismo, únicamente cambiando "acc" por el nombre del objeto en cuestión?

No es exactamente así, ya que es un grupo de opciones. Debajo de lo anterior pon

Me.Categoría.Value = 0

He puesto este código:

Private Sub cc_AfterUpdate()
acc = Null
acc.Requery
Me.Categoría.Value = 0
End Sub

Y cuando clico la opción de todas las categorías, después de haber seleccionado una, el cuadro combinado del año no me filtra bien, es decir, sigue tomando el valor de la categoría seleccionada con antelación.

¡Gracias!

Por partes:

1º No sé para que sirve la opción Todas, porque lo único que hace si activas el botón es simplemente decir que el combinado se oculte, que en sus propiedades ya es visible=no. Por otro lado, si vas a elegir sólo una Categoría en el combinado, ¿para qué hay que activar primero un grupo de opciones de Elige una?. Elígela directamente del combinado

2º El año del combinado Año no se rige por lo que pongas o dejes de poner en Todas, si no por lo que elijas en el combinado, ya que ese es el criterio que se le ha puesto en el origen de la fila del combinado Año

3º Si tu eliges Material de Enfermería en el combinado Año te saldrá 2015. Si ahora eliges Material de oficina verás que el combinado año se ha puesto en blanco pero si lo despliegas te aparece 2014, y si ahora eliges Hosting te aparece 2012

Gracias por la aclaración. Quería saber únicamente si era posible hacerlo, pensando en que quisieras rectificar y seleccionar todas las categorías, en vez de una en concreto, sin tener que abrir de nuevo el diálogo. 

Está perfecto todo lo explicado. Ya he recibido la base de datos. Muchísimas gracias por la ayuda prestada. Ahí va tu votación positiva. Un saludo.

Si lo que vas a hacer al activar la casilla Todas es que abra el informe con "todas" las categorías, está bien.

Respuesta
1

Te falta esta validación:

  If IsNull(Me.cc) Then
     MsgBox "Falta el cc", vbInformation, "Filtrando"
     Me.cc.SetFocus
     Exit Sub
   End If

Debes hacer lo mismo para los otros campos del procedimiento

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas