Вы можете передать значение String в Application.Run
, чтобы сократить код до
Sub Lookup()
Dim day As String
day = ThisWorkbook.Sheets(8).Cells(2, "x").Value
Application.Run day
End Sub
, а затем с помощью Sheets(8).cells(2,"x")
добавить проверку данных в ячейку со значением списка Mon, Tue, Wed, Thu, Fri
или какими бы ни были ваши имена макросов, чтобы пользователь мог выбирать только из определенного списка вариантов.
Кроме того, вам нужно явно ссылаться на свой лист вместо ссылки на его положение.
т.е.
day = ThisWorkbook.Sheets(8).Cells(2, "x").Value
становится
day = ThisWorkbook.Sheets("YourSheetNameHere").Cells(2, "x").Value2
или обрабатываете его в своем макросе
Sub Lookup()
Dim day As String
Dim ValidSubs As Variant
Dim RunSub As Boolean: RunSub = False
Dim c
ValidSubs = Array("Mon", "Tue", "Wed", "Thu", "Fri")
day = ThisWorkbook.Sheets(8).Cells(2, "x").Value
For Each c In ValidSubs
If c = day Then
RunSub = True
Exit For
End If
Next c
If RunSub Then
Application.Run day
Else
MsgBox "You have selected an invalid choice - only the following are allowed:" & vbNewLine & Join(ValidSubs, vbNewLine)
End If
End Sub