Edit: Okay.... just to prove that 'The code snippet appears to be appropriate', I created simple macro:
Sub x()
Dim sheet_name
sheet_name = Range("B1").Value
Sheets(sheet_name).Select
End Sub
Then, I entered 'Sheet3' (no quotes) in cell B1 of Sheet1. Upon calling the macro from Sheet1, guess what? Sheet3 became the active sheet.
Thus, I would infer that if Excel is throwing a 'Subscript out of Range' error, that there is no sheet in the workbook named exactly as the string in B1. If the string in B1 appears to match the string in the sheete Tab, then most likely, there is a 'space' character before/after the value in B1, or before/after the string in the sheet Tab.
================
Are you getting a Compile error or a Run-Time error? The code snippet appears to be appropriate, but without seeing the entire macro it is difficult to see what is causing Excel to cough up a hairball.
As far as dimming a variable. Any variable that is not 'type' dimmed automatically defaults to type 'Variant', which means it will adjust to the required type at run time. The downside to using variant types is that is does slow Excel down a tad. However, in most Excel applications the run time difference is not truly noticeable.