В 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», а потім друге діалогове вікно з текстом «Марина».