Intentaré responderte a todas tus dudas sin dejarme ninguna:
1º/ Filtrar por mes y año:
A tu SQL tendrás que añadirle esas condiciones en la parte del WHERE. Lo que no tengo claro es cómo debes hacerlo, porque no sé cómo son tu tabla y consulta ni cómo quieres aplicar el filtro. Usa posibilidad sería:
WHERE tbl_farmaciasstockp1.ID=cst_MaxP1.ID AND tbl_farmaciasstockp1.Mes=cst_MaxP1.Mes AND tbl_farmaciasstockp1.Año=cst_MaxP1.Año
2º/ CurrentDb. Execute y DoCmd. RunSQL hacen lo mismo, pero yo prefiero usar la primera simplemente porque no lanza los mensajes de advertencia de ejecutar consultas de acción y así no me obliga a escribir código para desactivar los avisos y volverlos a activar.
3º/ El error 3061 no te puedo decir de dónde viene sin analizar el archivo.
4º/ El error 307 te indica que uno de los campos que usas (o bien Id o bien IdMedicamento) no se encuentran en el recordset, o al menos no con ese nombre.
Id e IdMedicamento en principio yo entiendo que son numéricos (un ID único siempre debería ser autonumérico). Pero si son de texto, la linea sería:
RstTabla.FindFirst "Id ='" & RstConsulta("IdMedicamento") & "'"