Если процедура вы вызываете внутри вашего проекта VBA, то вы можете просто вызвать процедуру непосредственно:
Sub Foo()
'Application.Run "SomeProc"
SomeProc
End Sub
Если вам нужно, чтобы быть в состоянии назвать вещи динамически по имени, вы могли бы изучить с использованием классов и CallByName
:
'In a standard module
Sub Foo()
Dim o as New ProcRunner
CallByName o, "SomeProc", VbMethod, args
End Sub
'In a class module called ProcRunner
Sub SomeProc()
DoSomethingHere
'Or, do something in a standard module
Module1.SomeOtherProc
End Sub
Или, вы можете написать свой собственный динамический обработчик, вдоль линий:
Sub AppRun(ProcName As String, ParamArray Args)
Select Case ProcName
Case "SomeProc"
SomeProc
Case "SomeFunc"
SomeFunc
End Select
End Sub
Если вы вызываете процедуры в другом проекте VBA, вам может потребоваться добавить ссылку на этот проект, в зависимости от узла VBA.
Однако, если вы используете Application.Run
, потому что вы вызываете функции, зарегистрированные в DLL или XLL, то вы не имеете никакого выбора, кроме как использовать Application.Run
Это потому, что 'Application.Run' в основном то же самое, что и внешний вызов. Что вы используете * для *? Возможно, есть обход. – Comintern
Если это относительно небольшой список подпрограмм, которые могут быть запущены, вы можете использовать конструкцию выборочного шкафа, в которой различные случаи назовут непосредственно подводы –
Спасибо за ваши ответы. Он должен быть более гибким, чем конструкция в виде шкафа. – someprogrammer