I had the idea that it was wanted probably because of many worksheets in a workbook and therefor unwieldy to select sheets.
If you have a UserForm with a ListBox ("ListBox1"), you would not have to put all the sheet names in the code.
But whatever, he/she has a couple choices.
Private Sub UserForm_Initialize()
Dim sh As Worksheet, shArr
For Each sh In Sheets
shArr = shArr & sh.Name & "|"
Next
ListBox1.List = WorksheetFunction.Transpose(Split(shArr, "|"))
End Sub
Private Sub ListBox1_Click()
Dim a As String, sh As Worksheet
a = ListBox1
Unload Me
With Sheets(a)
.Visible = True
.Select
End With
For Each sh In ThisWorkbook.Worksheets
If sh.Name <> ActiveSheet.Name And sh.Visible = True Then sh.Visible = False: Exit Sub
Next sh
End Sub