¿Cómo realizar un filtro múltiple?

Tengo esta base de datos en un formulario y necesito mediante un código vba poder filtrar más de un material en este formulario (esta señalado con un a flecha en la imagen siguiente)

Lo he intentado con este código pero no se como hacerlo pues deseo que se mantenga así

Private Sub Comando27_Click()
    Dim VMATERIAL As String
    Dim VFECHA1 As String
    Dim vLargo As Integer
    Dim miFiltro As String
    Dim rst As Recordset
    VMATERIAL = Nz(Me.FILTRO_MATERIAL.Value, "")
    VFECHA1 = Nz(Me.FILTRO_FECHA_INICIAL.Value, "")
    miFiltro = ""
    If VMATERIAL <> "" Then
    miFiltro = "AND [MATERIAL]='" & VMATERIAL & "'"
    End If
    If VFECHA1 <> "" Then
    miFiltro = "AND [FECHA]='" & VFECHA1 & "'"
    End If
    vLargo = Len(miFiltro)
    If vLargo > 0 Then
    miFiltro = Right(miFiltro, vLargo - 4)
    End If
    Me.Filter = miFiltro
    Me.FilterOn = True
    Set rst = Me.Recordset.Clone
    If rst.RecordCount = 0 Then
        MsgBox "No se encontró ningún registro", vbInformation, "SIN REGISTROS"
    End If
End Sub

2 Respuestas

Respuesta
1

El problema está en que ha definido la variable VFECHA1como String y debe ser como fecha, reemplácela por Dim VFECHA1 As Date y en la línea del filtro de la fecha:

    If VFECHA1 <> "" Then
    miFiltro = "AND [FECHA]='" & VFECHA1 & "'"
    End If

Cámbiela por :

If VFECHA1 <> "" Then
  miFiltro = "AND [FECHA]=" & Format(VFECHA1, "\#mm\/dd\/yyyy\#")
End If

Aunque le recomiendo para determinar si en un campo fecha hay información y es válido utilice IsDate(), en este caso quedaría:

If IsDate(Me.FILTRO_FECHA_INICIAL) Then
  miFiltro = "AND [FECHA]=" & Format(VFECHA1, "\#mm\/dd\/yyyy\#")
End If

el codigo que envie anterioremente me funciona lo que no he podido lograr en el codigo es que me filtre pero por ranog de material ejemplo: tener dus cuadro de texto uno denominado material_inicial y otro material final y al introducir los datos me filtro los datos que estan en los cuadros de texto

No entiendo a Julián le pregunta sobre un rango de fechas y a mi sobre un rango del número de material. ¿Son ambas o una sola?. Sea cual sea debe utilizar BETWEEN valor1 AND valor2,. Si la consultas es rango de fechas y rango de números de material requiere 4 cuadros de texto.

Si puede envíeme la tabla a [email protected] así elaboro el ejemplo sobre valores reales, favor hacer en el asunto referencia a su consulta.

Respuesta
1

No te asustes si ves que algunos registros no tienen fecha, sólo se la puse a unos cuantos. Si tengo el formulario con dos cuadros combinados llamados ElegirFecha y ElegirPais

Si en ElegirFecha elijo una y pulso el botón

Si no elijo fecha pero si elijo Pais y pulso el botón

Y si elijo una fecha y un pais

Y el código del botón es

Private Sub Comando11_Click()
Dim vLargo As Integer, mifiltro As Variant
mifiltro = ""
If ElegirFecha <> "" Then
mifiltro = "AND [fecha]=forms!otro!elegirfecha"
End If
If ElegirPais <> "" Then
mifiltro = mifiltro & " AND [pais]='" & Me.ElegirPais & "'"
End If
vLargo = Len(mifiltro)
If vLargo > 0 Then
mifiltro = Right(mifiltro, vLargo - 4)
End If
Me.Filter = mifiltro
Me.FilterOn = True
End Sub

Ok probé el código y me resulto muchas gracias ahora lo que intento hacer es con ese mismo código hacer para un rango de fechas como para un rango de país que es lo que me resulta muy difícil ya que no encuentro la forma de hacerlo

Es sencillo con un ejemplo delante, pero largo de explicar. Entre otras cosas, depende de como tengas construidas las tablas. Por eso, si quieres, repito, si quieres, mándame un mensaje (sólo el mensaje) a [email protected] y te mando el ejemplo.

Si lo haces, en el asunto del mensaje pon tu alias Alcides, ya que si no sé quien me escribe ni los abro.

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas