David, me alegra que te funcione y con tu permiso añado una respuesta (será la ultima en este hilo).
-------------------------------------------
Eduardo, un poco de teoría:
Los módulos pueden estar asociados a un formulario/informe o pueden ser independientes, en ellos puede haber variedad de declaraciones tanto privadas como publicas he incluso constantes (publicas y privadas), depende del ámbito que necesiten abarcar.
No es la primera vez que un programador (serio) hace publico un evento de formulario para poder manipular datos desde una ubicación ajena al formulario (simplemente le cambio el ámbito).
La diferencia de un modulo asociado a un objeto informe/formulario con un modulo independiente esta en que al cerrar el formulario/informe ... desaparece la opción, las variables e incluso el objeto (los módulos independientes ni se abren ni se cierran: simplemente están).
No estoy de acuerdo con el planteamiento de que el usuario es ¿? Y ejecutará la acción 'abrir informe' aunque en el formulario que utiliza para filtrar ya no aparezcan resultados.
Tomado de la ayuda de Access (su particular biblia, porque supongo que la acción de abrir formulario no te la atribuirás como propia) ...
El método OpenReport lleva a cabo la acción OpenReport (AbrirInforme) en Visual Basic.
Sintaxis
Expresión. OpenReport(ReportName, View, FilterName, WhereCondition, WindowMode, OpenArgs)
Por otra parte:
La variable a nivel de procedimiento haría exactamente lo mismo que a nivel de modulo y liberaría antes los recursos consumidos pues desaparece con el 'End' (sub o Function)
Para filtrar el formulario -y poder utilizar la propiedad Count del RecordsetClone- hay que utilizar la propiedad Filter o dilapidar recursos generando un entorno paralelo (+ tiempo + recursos y similar resultado si se hace bien).
Siento curiosidad sobre como 'filtrar un conjunto de datos' sin utilizar los datos ¿por extrapolación?.