Filtrar un Formulario a través de dos campos fecha situados en otro Formulario

Primero agradeceros vuestra ayuda ante el problema que expuse hace pocos días y que se resolvió perfectamente, gracias a Icue y Jacinto.
Ahora tengo otro problema. Quisiera que desde un formulario pueda filtrar a un segundo formulario a través de dos campos fecha. Debe ser con un formulario por la cantidad de campos que tiene el segundo formulario y no poder situar los campos para filtrar.
Os cuento, tengo una tabla TAsociados, donde hay mayores de edad y menores, y que entre muchos campos tiene Código, Apellidos, Nombre, Dni, ……etc. También un campo fecha de inscripción FECHA_IS y otro de fecha de nacimiento FECHA_NAC, el primero indica la fecha de inscripción en la asociación y el segundo como indica el de su nacimiento.
Además hay un FAsociados donde están todos los socios dados de alta y un segundo formulario TBuscar para realizar el filtro.
Cada tiempo se realiza una asamblea de los asociados dados de alta, que sean mayores de edad y que estén inscriptos al menos 1 año en la asociación.
Como la fecha de las asambleas no tiene fecha fija, pensé situar en FBuscar un cuadro de texto donde indicar la fecha de asamblea y dos cuadros más. Uno que tome la fecha de la asamblea menos 18 años, con lo que se consigue filtrar los asociados mayores de edad y otro que tome la fecha de la asamblea menos 1 año, con lo que se consigue filtrar los asociados que lleven 1 o más inscriptos. Además de un botón que realice el filtro y llame a FAsociados ya filtrado por las dos fechas resultantes.
Como veis creo saber lo que quiero pero no consigo llevarlo a cabo, haber si podéis volver a ayudarme con este problema.

Respuesta
2

Angel: Un modo de hacerlo con esos controles que comentas, (y si quieres con uno solo, que sería la Fecha de Asamblea), puedes poner un código como éste:

En un Módulo Estandar declara una Variable Publica

Public FiltroAcum As String

'Filtro de Edad y antigüedad. En el Formulario de Petición
Private Sub BtnConvoca_Click()
Dim FNacAntIgual As Date, FAntigAntIgual As Date
Dim FiltroEdad As String, FiltroAntig As String
FNacAntIgual = DateAdd("yyyy", -18, Me.FAsamblea)
FAntigAntIgual = DateAdd("yyyy", -1, Me.FAsamblea)
Me.FNac = FNacAntIgual
Me.FInscrip = FAntigAntIgual
FiltroEdad = "[FechaNac]<=#" & Format(Me.FNac, "mm/dd/yyyy") & "# AND "
FiltroAntig = "[FechaInscrip]<=#" & Format(Me.FInscrip, "mm/dd/yyyy") & "#"
FiltroAcum = FiltroEdad & FiltroAntig
Me.BuscadorSubForm.Form.Form.Filter = FiltroAcum
Me.BuscadorSubForm.Form.Form.FilterOn = True
End Sub

Como ves habrás de adaptar los Nombres a lo que tu tengas, partiendo de que yo les llamo:

Al Botón >> BtnConvoca

Al Cuadro de Texto de la Fecha de la Asamblea >> FAsamblea

Al Cuadro de Texto de la Fecha de nacimiento >> FNac (18 años menos de FAsamblea)

Al Cuadro de Texto de la Fecha de la Inscripción >> FInscrip ( 1 año menos de FAsamblea)

Campos de la Tabla >> FechaNac y FechaInscrip

Nombre del SubFormulario en éste caso utilizado >> Buscador SubForm.

La parte final del Código en tu caso si quieres abrir otro Formulario, te va a cambiar ligeramente.

Después de FiltroAcum =

DoCmd.Open Form "NombreDeTuFormulario"

Forms!NombreDeTuFormulario.Form.Filter = FiltroAcum

Forms!NombreDeTuFormulario.Form.FilterOn = True

Mis saludos >> Jacinto

Muchas gracias Jacinto, he tomado tu solución y he realizado los cambios en los nombres y el filtro se realiza a la perfección. Sólo hay un pero, que el informe resultante no sale filtrado sale con todos los socios, el formulario sí sale filtrado por la fecha de asamblea indicada. ¿Cómo se podría sacar el informe ya filtrado?
El formulario FAsociados se basa en una consulta CAsociados, (que filtra los asociados dados de alta de los dados de baja), de la tabla TAsociados.

Jacinto un cosa más el filtro lo he realizado desde el formulario FBuscar, ya que en él tengo otras consultas. Gracias por su interés.

Angel: Si seguiste los pasos que te comenté de la declaración de la Variable publica, la puedes rescatar en el Report_Open del Informe, del siguiente modo.

Private Sub Report_Open(Cancel As Integer)
Me.Filter = FiltroAcum
Me.FilterOn = True
End Sub

Si copias éste código, no olvides activar el [Procedimiento de evento] .Un saludo >> Jacinto

Gracias por tu respuesta.Sí cree un módulo donde indique la variable,  he introducido el código que me índica en el evento abrir del Informe, y me indicas que active el procedimiento, y aquí no estoy seguro donde sería. Al no activarlo me señala un error y me resalta en azul Me.Filter.

Angel: Con el Informe en vista de diseño, accede asus Propiedades >> Eventos, y activas según Figura

Un saludo >> Jacinto

1 respuesta más de otro experto

Respuesta
2

Me perdí, pero puedes poner un botón y en sus propiedades-eventos-al hacer clic crear un procedimiento de evento y poner

DoCmd.OpenForm "el que sea", , , "year([fechaasamblea]) between year(date())-18 and year(date())-1"

Con lo cual te abre el formulario El que sea con los registros comprendidos entre esos años, o bien

docmd.openform"el que sea",,,"fechaasamblea between [escriba una fecha inicial] and [Escriba una fecha final]"

Con lo cual te pedirá que pongas una fecha inicial, la escribes, aceptas, te pedirá la fecha final, la escribes, aceptas y ya está.

¡Gracias! Muchas Gracia por tu interés en responder y perdona si te has perdido, algunas veces peco de sobre informar, temiendo no dar la suficiente información y consigo liar a la gente.


De tus soluciones, la cuales te agradezco, me guardare la segunda porque creo que me servirá para otra base de datos.


Ya que el problema que exponía era, resumiéndolo, que a una asamblea solo pueden acudir a ella los socios mayores de edad (por eso lo de -18) y entre ellos los que tengan una fecha de inscripción o antigüedad de al menos un año (-1), por eso hablo de fecha de asamblea, de nacimiento y de inscripción.

En la primera solución sólo te refieres a fecha de asamblea sin compararla con fecha de nacimiento y inscripción, entonces no hace ningún filtro y la segunda solución lo que hace es filtrar los datos entre dos fechas, una inicial y otra final, solo en relación a la fecha de asamblea. Por lo que no puedo aplicarlo a mi pregunta, pero como te he dicho, lo puedo aplicar en otros ámbitos.

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas