I must admit I found your macros somewhat impenetrable and rather too long for easy analysis and reading.
You should aim to keep macro procedures fairly short and concise. Rarely do I find the need to have any procedure more than say 25 lines of code.
That said I question whether your approach is the most efficient. It seems that you are essentially wanting to filter data based on certain criteria. In which case I would use the straightforward Data Filter Advanced Filter.
If you have several different reports, hold the column headers for each one in a separate sheet and when you want to create a report copy the appropriate headers to a common anchor cell.
Create dynamic range names for
"MyData", The Sales Report data,
"DataOut" which is the row of report column headers based on the output anchor cell
"MyCriteria" which is the column headers and selection values.
Above the DataOut header rows have criteria cells for each of your selection criteria and depending on the report add the relevant criteria. Then you can use a simple macro like
Bookmarks