Lanzar un informe con filtro a través de una lista de selección múltiple

Option Compare Database
Option Explicit
Private Sub cmdBorrar_Click()
    With Me
        .CBOSITU.Value = Null
        .cbsec.Value = Null
        .cbtipo.Value = Null
        .cbcat.Value = Null
        .FilterOn = False
    End With
End Sub
Private Sub cmdFiltro_Click()
    Dim vsitu As String
    Dim vsec As String
    Dim vrelab As String
    Dim vcat As String
    Dim vLargo As Integer
    Dim miFiltro As String
        'Cogemos los valores que hayamos seleccionado como filtro
    vsitu = Nz(Me.CBOSITU.Value, "")
    vsec = Nz(Me.cbsec.Value, "")
    vrelab = Nz(Me.cbtipo.Value, "")
    vcat = Nz(Me.cbcat.Value, "")
        'Inicilizamos el filtro
    miFiltro = ""
        'Creamos la primera parte del filtro
     If vsitu <> "" Then
        miFiltro = "AND [situ]='" & vsitu & "'"
    End If
     If vsec <> "" Then
        miFiltro = "AND [sec]='" & vsec & "'"
    End If
     If vrelab <> "" Then
        miFiltro = "AND [tipo]='" & vrelab & "'"
    End If
     If vcate <> "" Then
        miFiltro = "AND [cate]='" & vcat & "'"
    End If
        'Ahora cogemos la longitud del filtro
    vLargo = Len(miFiltro)
        'Recomponemos el filtro eliminando el primer 'AND '
    If vLargo > 0 Then
        miFiltro = Right(miFiltro, vLargo - 4)
    End If
        'Aplicamos el filtro al formulario
    Me.Filter = miFiltro
    Me.FilterOn = True
End Sub
Private Sub cmdImprimir_Click()
    DoCmd.OpenReport "Infdatos2", acPreview, , Me.Filter
End Sub

Buenas tardes:
Con vuestra ayuda he estado haciendo un formulario que tienen varios cuadros combinados que me sirven para filtarr y emitir un informe.

Pues bien, ahora me surge que en ocasiones necesito elegir dos valores que hay en el mismo cuadro combinado para que el filtro contenga esos dos valores

Investigando creo que la solución es hacerlo a traves de un cuadro de listra de selección multiple pero cuando cambio el cuadro combinado a cuadro de lista me deja seleccionar varios registro pero no me filtra. Entiendo que será que algo falla en el código pero no tengo ni idea... Si me podéis echar una mano

1 Respuesta

Respuesta
2

Sergio, cambiar un tipo de control y esperar que el código siga funcionando igual, es mucho esperar, jejeje.

En un cuadro de lista de selección múltiple no puedes hacer referencia "normal" a los valores relacionados, sino que tienes que recorrer una colección de valores llamada ItemSelected (https://docs.microsoft.com/es-es/office/vba/api/access.listbox.itemsselected) En ese enlace de la propia ayuda de Microsoft, tienes un ejemplo, y aquí puedes ver otro (https://neckkito.xyz/nck/index.php/ejemplos/13-formularios/78-formulario-buscador-al-tecleo) en el código del botón cmdVer.

Como verás, la forma de hacer el filtro en ese código es un poco diferente, pues usa IN(), aunque podrías seguir consutruyendo el filtro de la forma que ya conoces en cada vuelta del bucle de la colección.

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas