By the time the code goes to the compiler, TAGSETS.EXCELXP doesn't even see the macro variable reference. Any code that contains a macro "trigger", such as & or % goes into a "macro word scanner" and resolver phase prior to compilation. This is where macro variable references are turned into text.
There's nothing special about macros and TAGSETS.EXCELXP -- it works like the whole rest of SAS works as far as macro variables. The same rules apply. If you want your macro variable to be treated as a text string in the code, and if in your usage context, the text string needs quotes, then you must use double quotes in order to allow the macro word scanner and resolver to do its work.
You can test the correct reference without a lot of fuss as shown below -- then you decide which form of indirect reference is correct, based on whether you want the final resolved value to be FRED, SNAME1 or even DSN1.