You can modify a report programmatically, by opening it in design view,
e.g.:
DoCmd.OpenReport "Report1", acViewDesign, WindowMode:=acHidden
You can then use CreateReportControl or whatever to modify it.
However, that is not something you want to do in a production database, as
you lose the option to create an MDE. It is probably better (and simpler) to
just change the report in your copy of the database, and release a new front
end to send to your client, assuming the database is split:
http://allenbrowne.com/ser-01.html
You can change the criteria without having to modify the report. The
simplest approach is to use the WhereCondition of OpenReport:
http://allenbrowne.com/casu-08.html
http://allenbrowne.com/casu-15.html
At worst, you can assign the RecordSource of the report in its Open event.
For a subreport, you could change the SQL property of the QueryDef that
feeds it before you OpenReport.