Filtrar Informe por rango de fechas

He buscado en la web la solución pero no logro encontrarla, actualmente en mi formulario tengo un botón que abre un pequeño formulario donde tengo un campo que se le introduce una fecha y al dar clic en "aceptar" me filtra un informe ya prediseñado donde filtra los registros que necesito. Ahora quisiera que me preguntase por un rango de fechas; el código que uso para hacer el filtro normal por una sola fecha, es el siguiente:

Private Sub BtnFiltraPU_Click()
On Error GoTo Err_CmdAbrirConForm_Click
    Dim stDocName As String
    DoCmd.OpenForm "FrmInputConCombo3", acNormal, , , , acDialog
    stDocName = "RpAcusePU"
    If varValor <> "0" Then
        DoCmd.OpenReport stDocName, acPreview, , "EntregaPU=#" & Format(varValorFPU, "mm/dd/yyyy") & "#"
    End If
Exit_CmdAbrirConForm_Click:
    Exit Sub
Err_CmdAbrirConForm_Click:
    MsgBox Err.Description
    Resume Exit_CmdAbrirConForm_Click
End Sub

al ejecutar este boton comando, abre un form simulando un input:

En el se introduce la fecha a filtrar en el informe y el bonton de aceptar tiene este código:

Private Sub CmdAceptar_Click()
    'asiganamos a la variable publica varvalor el vcalor seleccionado en el combo
    'Si no hay nada seleccionado, con l afuncion nz le asiganaremos un valor que no exista
    'en el combo (yo elijo el cero), y que nos servira para comprobar luego si el valor introducido es correcto
    varValorFPU = (Me.CmbCombo)
    DoCmd.Close acForm, Me.Name
End Sub

y en un modulo de VBA tengo esto que es el valor de "varValorFPU":

Option Compare Database
Public varValorFPU As Date
Public Function ObtieneValorFPU() As Date
    ObtieneValorFPU = varValorFPU
End Function

hice muy detallada mi pregunta esperando me puedan ayudar.

1 respuesta

Respuesta
1

Tienes muchas formas para hacerlo:

1º/ Usar un formulario con dos cuadros de texto para poner la fecha inicial y la final

2º/ Usar dos formularios como el que tienes, uno para la fecha inicial y otro para la final.

3º/ Usar el mismo formulario dos veces para las dos fechas.

4º/ Pasar del formulario y pedir las fechas con dos InputBox

En cualquier caso, la linea que te haría falta sería como ésta:

DoCmd.OpenReport stDocName, acPreview, , "EntregaPU BETWEEN #" & Format(vFechaIni, "mm/dd/yyyy") & "# AND #" & Format(vFechaFin, "mm/dd/yyyy") & "#"

Donde vFechaIni y vFechaFin serán las variables en la que recojas las dos fechas.

A ver si te sale.

Un saludo.


Svein, entiendo la lógica de lo que me dices pero tengo otro par de dudas respecto a la línea de código que me comentas:

1. vFechaIni y vFechaFin, ¿deben estar declaradas dentro del modulo donde tengo las variables?

Así como declaro la de "varValorFPU" donde solo recogía una fecha.

¿En el botón "aceptar" se mantiene el mismo código?

Las variables las declaras como mejor te convenga, ya sea en el mismo módulo o como haces con varValorFPU.

El código del botón "Aceptar" lo podrás mantener o no, según la opción que utilices. Por ejemplo, si usas un formulario con dos cuadros, tendrás que añadirle para que te pase a la variable correspondiente el valor de la segunda fecha...

Perfecto Svein ya me ha funcionado.

aprovechando el mismo tema, solo que con una consulta, en ves de que me filtre el informe, deseo que me filtre y muestre una consulta.

dicha consulta funciona igual solo filtrando con una fecha, pero deseo que sea igual con un rango de fecha. puedes ayudarme por aqui o es necesario abrir una pregunta nueva?

La idea es la misma: imagino que tu consulta tendrá un criterio en el campo de tipo fecha que haga referencia a la función (=ObtieneValorFPU()) o al cuadro de texto del formulario (=Formularios! NombreFormulario! NombreCuadroTexto)

Para filtrar entre dos fechas, la idea es la misma, poniendo como criterio:

Entre ObtieneValorFechaIni() Y ObtieneValorFechaFin()

O bien:

Entre Formularios! NombreFormulario! FechaIni Y Formularios! NombreFormulario! FechaFin

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas