This is an interesting problem. Normally I would use acNormal and this would print the report with the WHERE clause that I needed.
How is it that the report always has the same number of pages, and you always want the one page (or more) from the same location? If the data is dynamic, then the page numbers will float as the data changes. If the report is static or an aggregate, why not create a report that just has the pages you want in it, and then print that report, instead of creating a report that has more pages than you need, and trying to print within that report?
Just a suggestion. I couldn't find an answer other than to put your criteria on a copy of the query, and then when the report opens, the Where clause is applied without code.
For example, if you are passing a CustomerID from a combo box, make a second copy of your query for this special report. Then on the Criteria line in the query designer, add this:
When the report runs, the query will take the criteria from the combo box on your form, and will apply it without code. Then use the DoCmd.PrintOut to get your page ranges.
Look it up at: http://wrox.books24x7.com