Filtrar datos de un subformulario desde un cuadro de opciones

Estoy tratando de adaptar este filtro que me indico Jacinto hace un tiempo a una nueva consulta sobre un sub formulario y no he logrado hacerlo.

En esta oportunidad, en el formulario principal, tengo un cuadro de opciones llamado “Opción”, cuyo primer botón (Opcion1) tiene valor 1 y segundo botón (Opcion2) tiene valor 2

Los datos se encuentran en un Sub formulario continuo llamado NEC dentro del formulario principal.

Al presionar la opcion1 debería mostrarme todas las líneas que contengan valores 0 o Nulos del campo Movimiento del Sub Formulario

Al presionar la opcion2 debería mostrarme todas las líneas que contengan valores > 0 del campo Movimiento del Sub Formulario

Si pudiesen ayudarme se los agradecería.

Jorge

2 respuestas

Respuesta
1

Jorge: Otra alternativa a la que correctamente te ofrece Icue es el Uso de Aplicar Filtros al SubFormulario >> NEC También en el AfterUpdate del Grupo de Opciones.

Private Sub Opción_AfterUpdate()
Dim FiltroCeroNulo As String, FiltroOtros As String,FiltroElegido As String
FiltroCeroNuo = "Movimiento = 0 Or Movimiento Is Null"
FiltroOtros = "Movimiento > 0"
Select Case Me.Opción.Value
    Case 1
        FiltroElegido = FiltroCeroNulo
    Case 2
        FiltroElegido = FiltroOtros
    Case Else
        MsgBox "Algo raro está ocurriendo, no has marcado opción",vbCritical,"OPCION SIN MARCAR"
End Select
Me.NEC.Form.Filter = FiltroElegido
Me.NEC.Form.FilterOn = True
End Sub

Aunque he ido escribiendo sobre la marcha creo que no tendrás dificultades y si fuera así me comentas. Un saludo >> Jacinto

Jacinto: Te escribo nuevamente por que me parece que mi respuesta no quedo registrada.

Te cuento que:

La opción 1 ( 0 y  Nulo) me muestra todo. Incluyendo >0

La opción 2 ( >0) me da correcto.

Le cambie el nombre del campo por que estaba mal y quedo asi:

Private Sub Opcion_AfterUpdate()

Dim FiltroCeroNulo As String, FiltroOtros As String, FiltroElegido As String

FiltroCeroNuo = "RQ = 0 Or RQ Is Null"
FiltroOtros = "RQ > 0"

Select Case Me.Opcion.Value
Case 1
FiltroElegido = FiltroCeroNulo
Case 2
FiltroElegido = FiltroOtros
Case Else
MsgBox "Algo raro está ocurriendo, no has marcado opción", vbCritical, "OPCION SIN MARCAR"

End Select

Me.NEC.Form.Filter = FiltroElegido
Me.NEC.Form.FilterOn = True

End Sub

Por otra parte quería consultarte: Si le agrego una opción (3) para que me muestre todo: ¿Como seria?

Como siempre Muchísimas Gracias!!!

Jorge: Antes de hacer una prueba, porque esta noche ya estarde, mira de que la línea >>

FiltroCeroNuo = "RQ = 0 Or RQ Is Null"  realmente sea un error al copiar, porque el Filtro >>

FiltroCeroNuo, no está declarado y abajo realmente le dices que aplique el FiltroCeroNulo, que lógicamente esrará vacío. La mecánica de poner un Grupo de opciones de 3 o 4 o n alternativas, es la misma que la de Aplicar 2, solo que irás aumentando los filtros y los Case x

Si tienes dificultades me comentas. Un saludo >> Jacinto.

Jacinto: Muchas gracias.

Si. Era un error de tipeo. Ahora funciona bien.

Con respecto al 3er caso: Debería declarar otra variable (FiltroNuevo) en la línea Dim y luego agregar:

FiltroNuevo = "RQ =???"

Case 3 

FiltroElegido = FiltroNuevo

¿Qué valor le debo poner para que me muestre todo?

Como siempre Gracias.

Jorge

Jorge: Si la Opción 3 que vas a añadir es para que te muestre todos los registros, en mi opinión si que cabe una instrucción del estilo que te cita Icue, es decir y tomando tu Código

Private Sub Opcion_AfterUpdate()
Dim FiltroCeroNulo As String, FiltroOtros As String, FiltroElegido As String
FiltroCeroNulo = "RQ = 0 Or RQ Is Null"
FiltroOtros = "RQ > 0"
Select Case Me.Opcion.Value
    Case 1
        FiltroElegido = FiltroCeroNulo
    Case 2
        FiltroElegido = FiltroOtros
    Case 3
        Me.NEC.Form.RecordSource = "SELECT * FROM [TablaOConsultaOrigen];"
        Exit Sub
    Case Else
        MsgBox "Algo raro está ocurriendo, no has marcado opción", vbCritical, "OPCION SIN MARCAR"
End Select
Me.NEC.Form.Filter = FiltroElegido
Me.NEC.Form.FilterOn = True
End Sub

Otra solución usando un >> FiltroTodos declarado en las variables como String y suponiendo que los valores de RQ los conoces y no te van a llegar al de 10000000 (Diez Millones), es que después del FiltroOtros pongas:

FiltroTodos = "RQ < 10000000"

De éste modo, después de Case 3 en lugar del Me.NEC....

FiltroElegido = FiltroTodos

Te comento ésto, porque a mi modo de ver, en éstos casos imagino que algún gran analista, sabria decir cual solución es la técnicamente óptima. En mi caso me conformo con sugerir aquella con la que un usuario se encuentre más cómodo. Un saludo >> Jacinto

¡Gracias Jacinto!

Como se que tipos de datos puede tener la tabla opte por ponerle:

FiltroTodos = "RQ >= 0 Or RQ Is Null"

y funciono correctamente.

En verdad no se que podría opinar un gran analista, pero de mi parte quiero agradecerte enormemente porque me has ayudado muchísimo a lo largo de estos últimos años con respuestas concretas y siempre de manera satisfactoria. Espero seguir contando contigo en el futuro.

Un abrazo

Jorge

Respuesta
1

En el evento Después de actualizar del grupo de opciones, que supongamos que se llama Marco4, puedes poner

If marco4=1 then

me.nec.form.recordsource="select * from tablaorigendelsubform where movimiento=0"

else

me.nec.form.recordsource="select * from tablaorigendelsubform where movimiento is null"

end if

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas