Виклик процедури 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