Вызов процедуры VBA

Способы вызова процедур в VBA. Урок №36

В VBA существует несколько способов вызова процедур для их выполнения. Обязательным условием вызова любой процедуры, является то, что она должна быть известна и доступна редактору VBA.

В этом уроке мы рассмотрим все способы запуска процедур в VBA, в том числе и вызов процедур, которые находятся в разных модулях.

Вызов процедур в VBA

При проверке, или тестировании простой процедуры типа Sub, для её выполнения наиболее часто используют команду Run → Run Sub/UserForm, или нажимают клавишу F5.

Если вы пытаетесь выполнить процедуру вышеописанным способом, то обязательно обращайте внимание на то в каком месте окна Code находится текстовый курсор. Потому что он должен располагаться в любой строке той процедуры, которую вы хотите запустить в данный момент.

Соответственно, если курсор находится вне процедуры, то вы её не вызовете.

Если курсор не установлен ни в одной из процедур окна Code, то откроется диалоговое окно Macros. В нём можно выбрать интересующую вас процедуру и выполнить её.

Список доступных для выполнения в данный момент процедур, можно увидеть и в окне Макрос. А как выполнять макросы мы рассматривали в Уроке №9 «Написание макросов и процедур в VBA редакторе и их выполнение».

Вызов и выполнение процедуры из других процедур

Любую процедуру, независимо от того, имеет она аргументы, или нет, можно вызвать и выполнить из другой процедуры.

Вызов процедуры без аргументов

Обычную процедуру типа Sub без аргументов, вызывают просто указав её имя в отдельной строке программы.

Пример

Sub myMes()
    MsgBox "Це повідомлення з процедури myMes"
End Sub
Sub myCode()
    myMes
    MsgBox "Але запустили ми її з процедури myCode"
End Sub

В данном примере, если мы запустим выполнения процедуры myCode, то первым делом будет выполнен вызов процедуры myMes и на экране появится диалоговое окно с сообщением «Це повідомлення з процедури myMes». Второй строчкой кода в процедуре myCode мы выводим на экран ещё одно диалоговое окно с сообщением «Але запустили ми її з процедури myCode».

Таким образом мы прекрасно видим, как происходит вызов одной процедуры из другой.

Вызов процедуры с передачей аргументов

Процедуру с аргументами вызывают с помощью ключевого слова Call. Это мы уже делали в уроке №33 «Аргументы процедур в VBA».

Пример

Sub myMes(Name)
    Name = "Іван"
    MsgBox "Це повідомлення з процедури myMes"
End Sub
Sub myCode()
    Dim myName
    Call myMes(myName)
    MsgBox myName
End Sub

В данном примере с помощью оператора Call вызывается процедура myMes и передаётся ей аргумент myName. В результате на экран будет выведено диалоговое окно с текстом «Це повідомлення з процедури myMes», а потом второе диалоговое окно с текстом «Іван».

Вызов процедуры из другого модуля

Вызываемые процедуру могут находиться в разных модулях. При этом они могут иметь даже одинаковое имя. То есть, в одном и том же модуле двух процедур с одинаковым именем быть не может. А вот в двух разных модулях допускается создание процедур с одинаковыми именами.

Для вызова процедуры из определённого модуля нужно сначала указать имя модуля, в котором находится процедура, затем поставить точку и имя вызываемой процедуры.

Для примера, я создал ещё один модуль Module2. В него я скопировал весь код из первого модуля Module1. С той лишь разницей, что в Module2 в процедуре myMes я изменил значение переменной Name на Марина. Это я сделал для того, чтобы видно было, что происходит вызов именно процедуры myMes из Module2.

Код Module1

Sub myMes(Name)
    Name = "Іван"
    MsgBox "Це повідомлення з процедури myMes"
End Sub
Sub myCode()
    Dim myName
    Call Module2.myMes(myName)
    MsgBox myName
End Sub

Код Module2

Sub myMes(Name)
    Name = "Марина"
    MsgBox "Це повідомлення з процедури myMes"
End Sub
Sub myCode()
    Dim myName
    Call myMes(myName)
    MsgBox myName
End Sub

В данном примере, мы вызываем из процедуры myCode которая находится в Module1, процедуру myMes, которая находится в Module2. Передаём в myMes аргумент myName. В итоге, на экране будет отображено диалоговое окно с текстом «Це повідомлення з процедури myMes», а потом второе диалоговое окно с текстом «Марина».

Main Menu