Apliqué la corrección sugerida y ha funcionado a la perfección.
'Asignamos los valores iniciales a las variables
vUsuario = Nz(Me.lstFiltro1.Value, "")
vTipo = Nz(Me.lstFiltro2.Value, "")
vFecha1 = txtFiltro3 'Nz(Me.txtFiltro3.Value, "")
vFecha2 = txtFiltro4 'Nz(Me.txtFiltro4.Value, "")
If IsNull(vFecha1) Or IsNull(vFecha2) Then
Else
vFecha1 = CDate(vFecha1)
vFecha2 = CDate(vFecha2)
End If
'Inicilizamos el filtro
miFiltro = ""
'Creamos la 1 parte del filtro
If vUsuario <> "" Then
miFiltro = "AND [USUARIO]='" & vUsuario & "'"
End If
'Creamos la 2 parte del filtro
If vTipo <> "" Then
miFiltro = miFiltro & " AND [DESCRIP]='" & vTipo & "'"
End If
'Creamos la 3 parte del filtro
If IsNull(vFecha1) And IsNull(vFecha2) Then
Else
miFiltro = miFiltro & " AND [INGRESO] BETWEEN #" & vFecha1 & "# AND #" & vFecha2 & "#"
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
Me.cmdLimpia.Visible = True
' Llama a otras partes
Call RECUENTO_INGRESOS
Call INFORMA
Ahora lo que debo revisar nuevamente es el conteo de los tipos (DESCR) cuando está filtrado.
¿Hay alguna forma de basar el conteo en los resultados de los filtros?
Porque llamo al conteo y no me devuelve el recuento sino como si no hubiera filtrado nada o con resultados generales basados en USUARIO y/o DESCRIP solamente.
if isnull(lstfiltro1) then
vuser = 0
else
vuser = 1
end if
if isnull(lstfiltro2) then '.value = "" then
vtipo = 0
else
vtipo = 1
end if
if vuser = 1 and vtipo = 1 then
' msgbox "usuario: sí / filtro: sí"
vnor = dcount("*", "[us_historial]", "[usuario] = txtusuarioselect and [descrip] = 'normal'")
vaut = dcount("*", "[us_historial]", "[usuario] = txtusuarioselect and [descrip] = 'autorizado'")
vact = dcount("*", "[us_historial]", "[usuario] = txtusuarioselect and [descrip] = 'actualización'")
vden = dcount("*", "[us_historial]", "[usuario] = txtusuarioselect and [descrip] = 'denegado'")
vfal = dcount("*", "[us_historial]", "[usuario] = txtusuarioselect and [descrip] = 'fallido'")
vfor = dcount("*", "[us_historial]", "[usuario] = txtusuarioselect and [descrip] = 'forzado'")
elseif vuser = 1 and vtipo = 0 then
' msgbox "usuario: sí / filtro: no"
vnor = dcount("*", "[us_historial]", "[usuario] = txtusuarioselect and [descrip] = 'normal'")
vaut = dcount("*", "[us_historial]", "[usuario] = txtusuarioselect and [descrip] = 'autorizado'")
vact = dcount("*", "[us_historial]", "[usuario] = txtusuarioselect and [descrip] = 'actualización'")
vden = dcount("*", "[us_historial]", "[usuario] = txtusuarioselect and [descrip] = 'denegado'")
vfal = dcount("*", "[us_historial]", "[usuario] = txtusuarioselect and [descrip] = 'fallido'")
vfor = dcount("*", "[us_historial]", "[usuario] = txtusuarioselect and [descrip] = 'forzado'")
elseif vuser = 0 and vtipo = 1 then
' msgbox "usuario: no / filtro: sí"
vnor = dcount("*", "[us_historial]", "[descrip] = 'normal'")
vaut = dcount("*", "[us_historial]", "[descrip] = 'autorizado'")
vact = dcount("*", "[us_historial]", "[descrip] = 'actualización'")
vden = dcount("*", "[us_historial]", "[descrip] = 'denegado'")
vfal = dcount("*", "[us_historial]", "[descrip] = 'fallido'")
vfor = dcount("*", "[us_historial]", "[descrip] = 'forzado'")
else 'vuser = 0 and vtipo = 0
' msgbox "usuario: no / filtro: no"
vnor = dcount("*", "[us_historial]", "[descrip] = 'normal'")
vaut = dcount("*", "[us_historial]", "[descrip] = 'autorizado'")
vact = dcount("*", "[us_historial]", "[descrip] = 'actualización'")
vden = dcount("*", "[us_historial]", "[descrip] = 'denegado'")
vfal = dcount("*", "[us_historial]", "[descrip] = 'fallido'")
vfor = dcount("*", "[us_historial]", "[descrip] = 'forzado'")
end if
me.txt1.value = vnor
me.txt2.value = vaut
me.txt3.value = vact
me.txt4.value = vden
me.txt5.value = vfal
me.txt6.value = vfor
(He cambiado el código a TODO MINUSCULAS para que no me rechace el posteo por tener demasiadas mayúsculas)
He puesto msgbox con las combinaciones para ver 'cuál caso' es el que arroja el resultado. Por algún motivo algunos no se muestran como combinación posible por ende no cuenta los registros.
¿Cómo podría hacer el código?
EL formulario es este: