Как я могу использовать Application.Run
с именованными аргументами?Основываясь на этой документации MS :
Вы не можете использовать именованные аргументы с этим методом.Аргументы должны передаваться по позиции.
Решение для принудительной передачи аргумента по позиции может показаться немного негибким для моей цели кода, которая заключается в создании макроса, который запускает макрос других людей путем передачи некоторых аргументов.Пример ниже:
Sub MyMacro()
Dim macroName as String
Dim foo as String
Dim bar as String
macroName = "'quux.xlam'!quuz"
foo = "thud"
bar = "baz"
' arguments pass by position
' this method works
Application.Run macroName, foo, bar
' however, I intend to remove position dependency to allow flexibility
' hence, I'd like to pass argument by name, as below
Application.Run macroName, foo:=foo, bar:=bar ' or below
Application.Run macroName, bar:=bar, foo:=foo ' both raise compile error
End Sub
' Below is a macro from Add-In quux.xlam
Sub quuz(foo as String, bar as String)
MsgBox foo & bar
End Sub
Мой вопрос похож на this , но там он не отвечает на мой вопрос.Так как же найти альтернативу для Application.Run
?
Сценарии / предположения
У меня есть свой собственный макрос.В то же время я использую чужой макрос (например, из надстройки).У нас обоих нет связи и нет соответствующей документации для надстройки.Возможные сценарии приведены ниже (2):
Код надстройки фиксирован
- Я знаю, что должен передать
foo
и bar
но неизвестный порядок.Я не могу открыть код, потому что макрос защищен паролем, например.
Мой код исправлен
- Кто-то еще использует мой макрос.Они знают, что когда они используют мой макрос, они должны принять два аргумента
foo
и bar
, но неизвестную позицию. - Мой макрос защищен паролем.
- Этот случай проще, так какЯ могу, по крайней мере, внести свой вклад и создать надлежащую документацию.
Моя реальная ситуация больше касается номера 2, поэтому я думаю, что мое решение сейчас заключается в передаче аргументов по позициии создать соответствующую документацию для него.Но я просто проверяю ситуацию № 1, может, кто-то сталкивался с ней раньше или у вас есть идеи по ее решению?