Condición en consulta mediante VBA

Tengo un informe con un campo de fecha. Me gustaría añadir un filtro, con el tipo de diálogo que aparece en la imagen adjunta, para que introduzcan una fecha de inicio y otra final, mediante VBA, de tal manera que pueda aprovechar el informe para realizar otras consultas, y no duplicarlos innecesariamente.

Gracias. Reciban un cordial saludo.

2 respuestas

Respuesta
2

Esta es la imagen a la que me refería.

Respuesta
1

Diego: Lo que yo veo es una consulta que supongo que será la Fuente de Datos del Informe.

Lo primero es comentarte que según la imagen le dices que te capture una Fecha de Inicio en un campo Numero de Factura.

La solución más simple es que en el Criterio de la Fecha de la Factura pongas:

Entre [Fecha de Inicio] Y [Fecha Fin]

Te pedirá los dos datos y te mostrará los registros comprendidos entre esas dos Fechas, ambas inclusive.

Para esas tareas, personalmente utilizo Filtros en Formularios. Hay muchos ejemplos, pero si quieres mira éste ejemplo que preparé para un usuario.

http://www.mediafire.com/download/zz1dw212k33mxet/FiltroA%C3%B1oActualYEntreFechas.rar 

Mis saludos >> Jacinto

Gracias, Jacinto. Si sé que se puede hacer en consultas. Lo que pasa es que si lo hago así, me toca haciar copias del informe que tengo, que con filtros en VBA lo utilizo para múltiples consultas. Si pusiera un filtro en la consulta, ya no podría solicitarlas. No sé si me explico. Por eso, estoy buscando el código VBA para hacer lo mismo que lo de la consulta.

Diego:

Mira si quieres éste otro Ejemplo que preparé para Kike.

http://www.mediafire.com/download/3ul2211no530sj0/BaseKikeFiltro.rar 

Mis saludos >> Jacinto

Diego: Si con las sugerencias y ejemplos que te he citado no terminaras de solucionar el problema, me comentas. Mis saludos >> Jacinto

Hola, Jacinto. He intentado replicar lo que haces en la base de datos, pero es bastante complejo, y, aunque en un principio me filtraba, ahora no sé por qué. Me gustaría, además, añadir el filtro de si es nulo la elección de fechas. Lo estoy haciendo el formulario Dialogo Prueba.

https://www.dropbox.com/s/yc9p7em80oaem9o/Diego.mdb?dl=0 

Gracias. Un saludo.

Diego: El código de llamada y filtrado lo tienes bien.

Lo que no acabo de entender es la segunda apertura del Informe que es innecesaria de modo que el código te quedaría.

Private Sub Etiqueta30_Click()
DoCmd.OpenReport "04-C IVA soportado", acViewPreview, , "[Fecha de la factura] BETWEEN #" & Format(Nz(Me.txtDesdeF, #1/1/1900#), "mm/dd/yyyy") & _
"# AND #" & Format(Nz(Me.txtHastaF, #12/31/9999#), "mm/dd/yyyy") & "#"
DoCmd.Close acForm, Me.Name
End Sub

Además obserbo que abres muchos Formularios de Dialogo que son iguales y lo único que Cambias es el Nombre del Informe al que llamas.

Creo que puedes sustituirlos todos por uno con un desplegable para elegir el Informe.

También haría una Función Publica de Filtro de Fechas, con parámetros para llamarla y no repetirla cada vez.

Estas observaciones no dejan de ser apreciaciones personales, ya que Access no tiene la obligatoriedad de seguir una metodología única.

Mis saludos >> Jacinto

Diego: Si quieres aplicar la solución que te apuntaba arriba haz lo siguiente.

Crea un Modulo Estandard y le llamas por ejemplo MdlFiltros, o como tu quieras

Al darlo de Alta te escribirá una primera línea

Option Compare Database

Debajo de ella copia y Pega éste código

Option Explicit
Public Function ElFiltroFecha(ElForm As Form, ElCampo As String, ElInforme As String) As String
ElFiltroFecha = ElCampo & " BETWEEN #" & Format(Nz(ElForm.txtDesdeF, #1/1/1900#), "mm/dd/yyyy") & "# AND #" & _
                           Format(Nz(ElForm.txtHastaF, #12/31/9999#), "mm/dd/yyyy") & "#"
DoCmd.OpenReport ElInforme, acViewPreview, , ElFiltroFecha
End Function

En tu Formulario de 03-E Dialogo Prueba, borras todo el código, para quitar posibles errores y copias éste.

Option Compare Database
Option Explicit
Private Sub Etiqueta30_Click()
If Not IsNull(Me.txtDesdeF) And Not IsNull(Me.txtHastaF) Then
        Call ElFiltroFecha(Me, "[Fecha de la Factura]", "04-C IVA soportado")
        DoCmd.Close acForm, Me.Name
Else
        MsgBox "Es Obligado informar de las dos Fechas", vbCritical, "FALTAN DATOS"
End If
End Sub

Si la Fución la llamas desde otro Formulario, aparte de Cambiar su Nombre los TextBox de Fechas han de ser txtDesdeF y txtHastaF.

Mis saludos >> Jacinto

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas