Mi colaboración en el hilo era mostrar una metodología para aplicar la opción 'Todos' mediante el filtro del formulario.
Se basa en que 'Todos' en la practica se comporte como NO aplicar filtro.
Los ComboBox devuelven una variable tipo 'Variant', esta variable consume mas recursos que una especifica, su gran ventaja es su adaptación al destino
Si el 'destino' requiere texto, devuelve un texto (o una fecha, numero, booleano o un NULL).
Si el 'destino' requiere un numero y se le envía un dato no numérico dará error, error que se soluciona convirtiendo el ¿texto? A un valor numérico (que puede ser el cero) y para ello se utiliza la función VAL.
Si el dato que recibe VAL es un numero no lo altera y si no lo es devuelve cero.
(Problema solucionado: TODOS (texto) ==> 0 (numero) y el resultado siempre será un numero).
Los filtros en los formularios/informes son una de sus propiedades y complementaria a esta esta la de activarlo o desactivarlo a voluntad en tiempo de ejecución se activa/Desactiva con un dato booleano (Si/No, Verdadero/Falso ...)
Conclusion: no hace falta borrar el filtro de un formulario, basta deshabilitarlo.
He regresado al inicio del hilo (el mensaje inicial) y sospecho que no has planteado de forma correcta el proceso.
Esta SQL (tomada del mensaje inicial) llena el combo con todos los años lectivos sin tener en cuenta al estudiante y es el principio del problema.
(Trascribo):
SELECT DISTINCT TRAYECTORIA_ESCOLAR.fecha_inscripcion_anual FROM TRAYECTORIA_ESCOLAR UNION SELECT "Todos" FROM TRAYECTORIA_ESCOLAR GROUP BY TRAYECTORIA_ESCOLAR.fecha_inscripcion_anual;
Los años se obtienen así (sin la opción TODOS):
SELECT DISTINCT TRAYECTORIA_ESCOLAR.fecha_inscripcion_anual FROM TRAYECTORIA_ESCOLAR ..... GROUP BY TRAYECTORIA_ESCOLAR.fecha_inscripcion_anual;
En esa SQL no hay una referencia al alumno seleccionado, en el combo se se mostraran todos los años existentes en la tabla TRAYECTORIA_ESCOLAR.
Un alumno solo tendrá datos en los años en que este escolarizado y esos son los que se deberían mostrar en el combo (+ la opción TODOS)
Si al filtro se le añade el parámetro 'alumno seleccionado' obtendremos sus años de escolarización.
El alumno se obtiene del combo ALUMNOS y al origen de lista del combo Años le sobra la agrupación (le basta con DISTINCT) y como solo se utiliza una tabla se puede resumir un poco:
SELECT DISTINCT fecha_inscripcion_anual FROM TRAYECTORIA_ESCOLAR Where Estudiante = " & Me.[combo estudiantes] & " UNION SELECT "Todos" FROM TRAYECTORIA_ESCOLAR;
NOTA: La dependencia del alumno requiere que se regenere el combo AÑOS al cambiar de alumno
El filtro del formulario:
Me.Filter = "Año = " & Val(Me.[nombre del combo])
Para activar el filtro: dos alternativas y ambas deberían funcionar:
Me.FilterOn = Me.[nombre del combo] <> "Todos"
Me.FilterOn = Val(Me.[nombre del combo]) <> 0
Se tienen que utilizar los nombres reales en la aplicación de los combos y campos utilizados, esto solo es un ejemplo.
Para que la opción "todos" funcione correctamente en tu combo "año" <a href="https://thatsnot-myneighbor.io">That's Not My Neighbor</a> y muestre todos los registros independientemente del año seleccionado, puedes modificar la consulta SQL de origen de fila del combo "año" para incluir una condición que verifique si se ha seleccionado la opción "todos". - Lily Collins
¿Es más sencillo que utilizar el propio filtro del formulario Access?. Si se elige un año se activa el filtro (y solo se vera ese año), si se elige 'Todos' no se activa el filtro y se mostraran ... ¿TODOS? - Enrique Feijóo