Разница между вызовом Sub и Application.Run - PullRequest
3 голосов
/ 20 марта 2019

В моем бизнесе есть несколько команд, которые работают над очень простыми макросами. Я пытаюсь сделать их все читаемыми друг другу и в каком-то похожем формате, чтобы новые столяры могли начать работать с данными.

Я упоминаю простые макросы, потому что никто не будет использовать подпрограммы с аргументами - большинство все равно получено из Macro Recorder

Половина команд использует:

Sub button()

Call sub1()
Call sub2()
Call sub3()
Call sub4()

End Sub

А другую половину используют

Sub button()

Application.Run("sub1")
Application.Run("sub2")    
Application.Run("sub3")    
Application.Run("sub4")

End Sub

Я понимаю, что если ваша подпрограмма не имеет аргументов, тогда Application.Run имеет применение - но, поскольку на ней почти нет обозначений - есть ли причина, по которой люди все еще используют Application.Run("")?

Может ли каждое его использование быть побежденным по скорости и процессу Call?

Ответы [ 2 ]

4 голосов
/ 20 марта 2019

Вы также можете передавать параметры через application.run. Я использую его, когда перебираю макросы. в приведенном выше примере вместо того, чтобы написать это:

Sub button()
  Call sub1()
  Call sub2()
  Call sub3()
  Call sub4()
End Sub

Вы могли бы написать это:

for i = 1 to 4
  application.run("sub" & i)
next i

если бы сабы принимали параметр str, вы могли бы сделать это:

for i = 1 to 4
  application.run("sub" & i, strVariable)
next i
1 голос
/ 20 марта 2019

Я использую Application.Run, если я пытаюсь запустить подпрограмму, которая является приватной в другом модуле.Если у меня есть какой-то шаблон, в котором я хочу скрыть макросы от пользователей, я объявлю его закрытым, чтобы они не могли запускать / видеть макрос из этого диалогового окна макросов.

В модуле 1 у меня есть

Private Sub priv()
  MsgBox “Private”
End Suv

В модуле 2 приведенное ниже сообщение выдаст ошибку Sub or Function not defined.

Sub callPriv()
  Call priv()
End Sub

Но в модуле 2 это запустится и отобразит окно сообщения

Sub callPriv()
  Application.Run “priv”
End Sub

Также полезно использовать Application.Run, если вы вызываете подпрограмму на вашем листе или в модулях thisWorkbook.

...