Another alternative is to use a small bit of substitution in the proc. This still uses dynamic SQL, but you are never executing user supplied values.
DECLARE @userSuppliedValue VARCHAR(50) = 'JOHNNY DROP TABLES'
DECLARE @substValue VARCHAR(50)
IF @userSuppliedValue = 'Table1'
SET @substValue = 'Table1'
IF @userSuppliedValue = 'Table2'
SET @substValue = 'Table2'
/*Repeat for N permutations*/
/* Throw an error if you think its necessary to do so when no match is found*/
IF @substValue IS NULL
RAISERROR(1,1,'errah')
EXEC ('SELECT * FROM ' + @substValue)