Preparé este ejemplo para imprimir el rango mediante una consulta y utilizando Wehere en la llamada del reporte:
TABLA
Hago una consulta sobre el campo idpedido para tomar el rango, con base en los campos del formulario que he llamado: ctlDesde y ctlHasta.
FORMULARIO
Observe que para facilitar la explicación utilizo 2 botones (puede hacerlo con un Grupo de opciones). El formulario contiene el rango Desde y Hasta, estos valores los necesita la consulta y el informe sin consulta.
DISEÑO CONSULTA
La consulta se llama qryPedidos y requiere del formulario frmPedidos. Observe como en Criterios se crea el criterio, si lo hace con el asistente el formulario pedidos debe estar abierto.
DISEÑO DE LOS REPORTES
Hay 2 reportes, uno utiliza la consulta y el otro, utiliza el where.
Reporte con la consulta:
Reporte con la tabla y filtra con where.
Resultado de cualquiera de los reportes:
Observe que reporte solo muestra el rango del idpedido comprendidos entre 30 y 50.
CÓDIGO BOTONES DEL FORMULARIO
Botón por consulta
Private Sub btnRptConsulta_Click()
If IsNull(Me.ctlDesde) Or IsNull(Me.ctlHasta) Then
Exit Sub
ElseIf Me.ctlDesde > Me.ctlHasta Then
MsgBox "Verifique el rango", vbInformation, "Reporte"
Me.ctlDesde.SetFocus
Exit Sub
End If
DoCmd.OpenReport "rptPedidos_con_consulta", acViewPreview
End Sub
Botón por Where:
Private Sub btnReportePorFiltro_Click()
If IsNull(Me.ctlDesde) Or IsNull(Me.ctlHasta) Then
Exit Sub
ElseIf Me.ctlDesde > Me.ctlHasta Then
MsgBox "Verifique el rango", vbInformation, "Reporte"
Me.ctlDesde.SetFocus
Exit Sub
End If
DoCmd.OpenReport "rptPedidos_por_filtro", acViewPreview, , "idpedido Between " & Me.ctlDesde & " AND " & Me.ctlHasta
End Sub
¿Cuál sistema es mejor?. Si tiene una tabla con muchos registros es mejor por consulta, toda vez, que únicamente se cargan los registros necesarios. En el sistema del filtrar el reporte se debe cargar toda la tabla.