You could make it run once per session.
What you would do is make a global variables -
When the script runs for the first time, $$selectedPrinter will = "" (nothing).
So immediately after the user sets the printer, set $$selectedPrinter to a function: Get(PrinterName).
Then, you can change your script to this:
If($$selectedPrinter <> Get(PrinterName) or $$selectedPrinter = "")
Print Setup 
Set Variable $$printerSet ; Get(PrinterName)
Enter Preview Mode
Then, it would only run print setup dialog if the user changed the printer or the printer hadn't been set yet.
Also, you could save it to a table of printers and call different set printer steps based on user. I've had to do such a thing.
I'd test this and see, but print setup doesn't actually select the printer, the print step does. If this is a single user file, the last selected printer is, I think, the printer they'll see in the dialog.
I often do a variation of your script that leaves out the print step.
Instead, I just enter preview mode and pause. Continuing the script returns them to Browse mode and possibly a different layout. If they want to print what they see in preview, they can simiply select print from the File menu. This approach sides steps a number of printer selection issues but often requires that you educate your users about the differences between "current record" and "records being browsed".