Te comento dos posibilidades, si bien la mecánica a la hora de crear el filtro es la misma:
Opción 1: habilitar en tu formulario, por ejemplo en el pie del mismo, dos cuadros de texto independientes (txtFechaInicial y txtFechaFinal, por ejemplo) y un cuadro combinado (cboMedico, por ejemplo, independiente de la tabla, pero que coja los valores de los médicos) y un botón para abrir el informe.
Opción 2: poner en tu formulario un botón, que abra un formulario "Filtro", en el que tendrás los dos cuadros de texto y el combo que comento en la opción anterior y un botón para abrir el informe y otro para cerrar ese formulario filtro.
El código para crear el filtro, que tendrás que poner en el botón que te abrirá el informe será parecido a este:
Dim miFIni as Variant, miFFin as Variant
Dim miMedico as (String/Integer) 'Aquí tendrás que elegir una, en función de si el cuadro combinado guarda valores de texto (string) o numéricos (integer)
Dim miFiltro as String
'Les asignamos sus valores
miFIni=Me.txtFechaInicial
miFFin=Me.txtFechaFinal
miMedico=Nz(Me.cboMedico,0) 'Estoy suponiendo que el valor del como es integer. si fuera string, tienes que cambiar el 0 por "")
miFiltro=""
'Supongo que quieres filtrar siempre entre dos fechas, por lo que si se deja una en blanco, nos avisa y sale a la espera de que se rellene.
'Si quisieras tener la opción de filtrar sólo por una de ellas, o sólo por medico, le puedes quitar estos controles.
If IsNull(miFIni) Then
MsgBox "Tienes que introducir una Fecha Inicial", vbInformation, "AVISO"
Me.txtFechaInicial.SetFocus
Exit Sub
End If
If IsNull(miFFin) Then
MsgBox "Tienes que introducir una Fecha Final", vbInformation, "AVISO"
Me.txtFechaFinal.SetFocus
Exit Sub
End If
'Comprobamos que se haya metido una fecha
If Not IsDate(miFIni) Then
MsgBox "Tienes que introducir una Fecha", vbInformation, "AVISO"
Me.txtFechaInicial.SetFocus
Exit Sub
End If
If Not IsDate(miFFin) Then
MsgBox "Tienes que introducir una Fecha", vbInformation, "AVISO"
Me.txtFechaFinal.SetFocus
Exit Sub
End If
'Aquí podrías añadir otros controles de fecha, como por ejemplo que la fecha no sea posterior a la actual...
'Si quieres filtrar obligatoriamente por medico, le añades este control:
If miMedico=0 Then ' o miMedico="", según el tipo de dato
MsgBox "Tienes que seleccionar un Medico",vbInformation, "AVISO"
Me.cboMedico.SetFocus.
Exit Sub
End If
'Construimos el filtro para las fechas
miFiltro="[fech_visita]>=#" & miFIni & "# AND [fech_visita]<=#" & miFFin & "#"
'Ahora le añadimos la parte del medico, si lo hemos seleccionado:
If miMedico<>0 Then miFiltro=miFiltro & " AND [med_trat]=" & miMedico ' o If miMedico<>"" Then miFiltro=miFiltro & " AND [med_trat]='" & miMedico & "'"
(Si el medico es obligatorio elegirlo, podrías construir todo el filtro en una linea:
miFiltro="[fech_visita]>=#" & miFIni & "# AND [fech_visita]<=#" & miFFin & "# AND [med_trat]=" & miMedico o miFiltro="[fech_visita]>=#" & miFIni & "# AND [fech_visita]<=#" & miFFin & "# AND [med_trat]='" & miMedico & "'")
'Abrimos el informe filtrado:
DoCmd. OpenReport "ffiltro", acViewPreview,, miFiltro