Duda código vba valor booleano

Estoy diseñando un formulario que realiza varios filtros.

Contiene los campos "Nom unitat vigent", "Serie documental", "Any final" y "Per eliminar".

Los campos "Nom unitat vigent" y "Serie documental" son de texto, cuyos valores el usuario selecciona mediante un cuadro combinado.

El campo "Any final" es un cuadro de texto sobre el que el usuario escribe una fecha.

El campo "Per eliminar" es un campo con un valor booleano (Sí/No), que el usuario tiene la opción de marcar.

Siguiendo la guía de Sveinbjorn El Rojo con la Base de datos Multifiltro hice el siguiente código para el filtro:

Private Sub Comando50_Click()
Dim Serie_documental As String
Dim Nom_unitat_vigent As String
Dim Check As String
Dim miFiltro As String

Serie_documental = Nz(Me.Cuadro_combinado41.Value, "")
Nom_unitat_vigent = Nz(Me.Cuadro_combinado39.Value, "")
Check = Nz(Me.Per_eliminar.Value, "")

If Serie_documental <> "" Then
Serie_documental = Replace(Serie_documental, "'", "''")
miFiltro = "[Serie documental vigent]='" & Serie_documental & "'"
End If

If Nom_unitat_vigent <> "" Then
Nom_unitat_vigent = Replace(Nom_unitat_vigent, "'", "''")
miFiltro = miFiltro & " AND [Nom unitat vigent] ='" & Nom_unitat_vigent & "'"
End If

If Check <> "" Then
miFiltro = miFiltro & " AND [Per eliminar]=" & Check
End If

miFiltro = miFiltro & " AND ([Any final]<=#" & Me.Texto44 & "#)"
'MsgBox miFiltro

Me.Filter = miFiltro
Me.FilterOn = True

Realiza todos los filtros correctamente menos el filtro correspondiente a:

If Check <> "" Then
miFiltro = miFiltro & " AND [Per eliminar]=" & Check
End If

No sé porqué motivo hace el filtro al revés, es decir, me filtra los registros que no tienen marcados los casillas Si/No del campo "Per eliminar", cuando yo quiero que filtre los que sí están marcados.

¿Alguien sabe qué pasa?

1 respuesta

Respuesta
2

Si te fijas en el ejemplo, para el campo Casado, que es de tipo Si/No, crea la variable como Dim vCasado as Variant, no como Dim vCasado As String...

El error creo que lo tienes ahí, en la declaración de la variable.

Gracias por contestar.

He puesto as Variant pero sigue filtrando sólo los registros que no tienen el check marcado, en vez de filtrar los checks marcados.

Es muy raro... Prueba así :

miFiltro = miFiltro & " AND [Per eliminar]=" & cbool(Check)

Comprueba también (con un msgbox, por ejemplo), que el valor de la variable es el correcto: cualquier cosa que no sea -1 o True, lo va a interpretar como 0 o False, y por eso te filtra solo los que están desmarcados.

Cuando lo ejecuto me aparece un cuadro de mensaje indicando que ponga el valor del parámetro "Falso".

Sí que es raro.

Como a casilla o está marcada o desmarcada, solo tendrás la opción de ver o los registros marcados o los desmarcados, ¿correcto?.

Es ese caso, define la variable:

Dim Check As Boolean

le asignas el valor así:

ChecK=Cbool(Me.Per_eliminar)

Y esa parte del filtro la creas simplemente:

miFiltro = miFiltro & " AND [Per eliminar]=" & Check

sin el If.

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas