Я прочитал данные за и против ON X GOTO
утверждений и хорошо знаю об альтернативах Calls и Jmp и о том, что это считается плохой практикой, но хотел бы простое альтернативное решение для его использования. В равной степени (не просто из-за лени), но использование обширных строк кода для каждой альтернативы кажется неэффективным и не таким простым для чтения.
По сути, мне нужна простая альтернатива следующему (написанному на английском языке, а не на каком-то конкретном коде, но необходимому на VBA):
Input x
On x Goto LineA, LineB, LineC
LineA....
End
LineB....
End
LineC....
End
или:
List of alternatives (choice = 1, choice = 2, choice = 3)
Input choice
on choice someVariable = string1, string2, string3
(Remaining code which uses that string)
Оба варианта очень похожи, если учесть, что список может быть любой длины, а строки могут быть длиннее, но выбираются одним оператором, а не переходят на новые строки кода в каждом конкретном случае.
решение1
Не игнорируйте лучшие практики и советы. Этот код прекрасно читается и делает то, что вам нужно, не нарушая правил...
Sub test()
Select Case InputBox("Enter a value")
Case "1"
'Do things that are specific to "1"
Beep
'Or better still, call a specific sub
DoSomething1
Case "2"
'Do things that are specific to "2"
Beep
'Or better still, call a specific sub
DoSomething2
Case "3"
'Do things that are specific to "3"
Beep
'Or better still, call a specific sub
DoSomething3
Case Else
'Do Nothing
End Select
End Sub
Sub DoSomething1()
Beep
End Sub
Sub DoSomething2()
Beep
Beep
End Sub
Sub DoSomething3()
Beep
Beep
Beep
End Sub