Hola, Tengo una consulta con Formularios Access 2010

En Mi formulario existen 2 Cuadros combinados. Quisiera que cada cuadro combinado al cambiar aplique el filtro del valor seleccionado, pero que mantenga lo ya filtrado. Es decir:
Selecciono en el cuadro combinado de ciudades: Ciudad1, aplique el filtro al formulario.
Ahora con el formulario mostrando los registros cuya ciudad es Ciudad1 seleccono del cuadro combinado de Tipo Tienda: Deportes, me muestre ahora solo los registros con Ciudad1 y Tiendas Deportes. Y si cambio la ciudad a ciudad2, aplique el filtro con el valor tipo tienda ya filtrado:CIudad2, Deportes... De modo que filtre sobre lo ya filtrado.

1 Respuesta

Respuesta
1
Para hacer lo que me pides voy a suponer un par de cosas:
- El cuadro combinado de las ciudades se llama cboCiudad
- El cuadro combinado de las tiendas se llama cboTienda
- Los valores que almacenan esos combos son de tipo texto
- Los campos respectivos de la tabla los llamaré [Ciudad] y [Tienda]
Para saber los nombres de los controles tienes que sacar sus propiedades y te vas a la pestaña Otras->Nombre, y el valor que hay ahí es el nombre.
Vamos allá:
1.- Saca las propiedades del cboCiudad->Pestaña Eventos->Después de actualizar. Si haces click en el espacio en blanco que hay a la derecha te aparecerá un pequeño botón con puntos suspensivos. Haces click sobre él y, en la ventana que te sale, le dices que quieres generar código.
2.- Se te abrirá el editor de VB, con dos líneas por defecto (Private Sub... y End Sub). Esas líneas no debes tocarlas. En medio de las mismas escribes el siguiente código:
---
Private Sub
Dim vCiudad, vTienda As Variant
vCiudad = Me.cboCiudad.Value
vTienda = Me.cboTienda.Value
'Si dejamos cboCiudad vacío no hace nada
If isnull(vCiudad) then exit sub
'Quitamos el filtro que hubiera en el formulario,
'si es que hay alguno
If Me.FilterOn = True Then
Me.FilterOn = False
End If
'Decidimos si aplicamos un filtro o dos
If isnull(vTienda) Then 'Si no hay valor en cboTienda aplicamos un solo filtro
DoCmd.OpenForm me.name,,,"[Ciudad] ='" & vCiudad & "'"
Else 'Si hay valor en ambos combos filtramos por ambas condiciones
DoCmd.OpenForm me.name,,,"[Ciudad] ='" & vCiudad" & "' AND [Tienda] ='" & vTienda & "'"
End If
End Sub
---
Ahora sacamos las propiedades de cboTienda y en el evento después de actualizar el generamos el siguiente código:
---
Private Sub
Dim vCiudad, vTienda As Variant
vCiudad = Me.cboCiudad.Value
vTienda = Me.cboTienda.Value
'Si dejamos cboTienda vacío no hace nada
If isnull(vTienda) then exit sub
'Quitamos el filtro que hubiera en el formulario,
'si es que hay alguno
If Me.FilterOn = True Then
Me.FilterOn = False
End If
'Decidimos si aplicamos un filtro o dos
If isnull(vCiudad) Then 'Si no hay valor en cboCiudad aplicamos un solo filtro
DoCmd.OpenForm me.name,,,"[Tienda] ='" & vTienda & "'"
Else 'Si hay valor en ambos combos filtramos por ambas condiciones
DoCmd.OpenForm me.name,,,"[Ciudad] ='" & vCiudad" & "' AND [Tienda] ='" & vTienda & "'"
End If
End Sub
---
Como verás, tú tendrás que cambiar los campos [Tienda] y [Ciudad] por los nombres de tus cambos, al igual que los nombres de cboCiudad y cboTienda.
Te he dejado el código preparado para que no necesites realizar un filtrado secuencial (es decir, primero cboCiudad y segundo cboTienda). Puedes empezar a filtrar por el que quieras.
Bueno. El código te lo he puesto de cabeza, por lo que si te da algún error me lo comentas e intentamos solucionarlo (pilla qué hacías, qué te marca -al depurar- y qué error te da).
Espero que te vaya bien.
Suerte!
No he recibido noticias tuyas. Te rogaría que cerraras la consulta.
Ayer fue cuando pude retomar el problema. Me funciono perfecto como lo sugeriste. SOlo unos simples ajustes...
Gracias por tu valiosa ayuda !
Tayro

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas