Your question as presented leaves open quite a number of questions. You statement about using a macro is one. The question here is are you knowledgeable in writing macros? If not, it is a major task in itself to learn all the necessary workings.
The majority of questions are really about procedure. You say to press a button to generate a report base upon screen content. Is this before or after the data is saved & how is it known it is saved? The Base form contains a form and subform. Does the subform have one or multiple records and if multiple are they all to be printed? This may only be some of the possible questions you should be looking at.
One possibility you may want to pursue is a simple flag in the record if it is to be printed. Then the query used would only select those records where the flag was set. Of course once the record was printed, this flag would need to be cleared. Again, possibly a macro.
A macro for the procedure you specify may be to grab each of the individual fields needed (with proper code), write them to a table just for this purpose and then execute the report based upon that special table. This table should be cleared of any records just before each use within the macro.
Actually creating this kind of macro, as your opening question states, would require most if not all of the Base & database information, a lot of question answering and possibly some considerable amount of time.
Edit 6/21/17:
Just to save a bit of back & forth I attached a sample which is based upon parameter selection. The database is set with two customer records: 1 & 2. If you run Report1ByCust
you will enter a 1 or 2 to print report. Those two customers are set with three different invoices (quick & dirty set-up - would not normally do this way; just a demo). Cust #1 has Invoice #1111 and Cust #2 has Invoice #3333 & 4444. Running Report2ByInvoice
you will enter one of these three invoice numbers.
Sample: CustomerSelectForPrint.odb