Vba підпрограма-процедура

Можна спростити програмування, розбиваючи завдання на невеликі логічні компоненти. Ці компоненти, звані процедурами, можуть згодом стати будівельними блоками, які дозволять посилити і розширити VBA.

При програмуванні з використанням процедур можна виділити дві основні переваги:

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

Методики, встановлені для однієї програми, можуть виступати в якості будівельних блоків для інших програм, зазвичай з невеликими змінами або зовсім без них

У VBA використовується кілька видів процедур:

Процедури Sub (не повертають значення)

Процедури Function (повертають значення)

Процедури Property (можуть повертати і привласнювати значення), а також встановлювати посилання на об'єкти.

Синтаксис процедури Sub такий:

При виклику процедури виконуються оператори між ключовими словами Sub і End Sub. Процедури Sub можна поміщати в стандартні модулі, модулі класів і форм. За замовчуванням процедури Sub у всіх модулях мають атрибут public, який означає, що ви матимете змогу дзвонити з будь-якого місця програми.

Загальна процедура вказує додатком, як виконувати конкретну задачу. Одного разу певна, вона повинна кожен раз спеціально викликатися додатком. На противагу їй процедура обробки події після виклику залишається в стані очікування подій, викликаних користувачем або ініційованих системою.

Навіщо треба створювати спільні процедури? Одна причина полягає в тому, що кільком різним процедурам обробки подій може знадобитися виконати одні й ті ж дії. Загальні оператори поміщають в окрему процедуру (загальну процедуру), а в процедури обробки подій поміщають виклики цієї процедури. Це виключає дублювання коду і полегшує підтримку програми.

Створення нових процедур

Для створення нової загальної процедури слід у вікні коду набрати на клавіатурі заголовок процедури і натиснути клавішу Enter. Заголовок процедури складається з слова Sub або Function, за яким слідує ім'я процедури. наприклад:

"Існуючу загальну процедуру можна побачити, вибравши елемент (General) в списку Object у вікні коду і потім процедуру в списку Procedure" Існуючу процедуру обробки події можна побачити, вибравши відповідний об'єкт у списку Object у вікні коду і потім процедуру в списку Procedure

2. Вибрати проект в списку Project / Library (Проект / Бібліотека).

3. Вибрати модуль в списку Classes (Класи) і процедуру в списку Members of (Члени).

4. Вибрати опцію View Definition (Подивитися визначення).

Виклик процедур Sub

Процедура Sub відрізняється від процедури Function тим, що її не можна викликати по імені в вираженні. Її виклик здійснюється в окремому операторі. Також процедура sub, на відміну від функції, не повертає значення. Однак, як і функція, вона може змінювати значення будь-яких змінних, переданих їй як параметри.

Існують два способи виклику процедури sub - за допомогою ключового слова Call і без нього:

'Обидва ці оператора викликають процедуру Sub з ім'ям МуРгос.

Call МуРгос (FirstArgument, SecondArgument)

МуРгос FirstArgument, SecondArgument

Зауважимо, що при наявності ключового слова Call, параметри укладені в круглі дужки. Якщо ключове слово Call опускається, слід опустити і дужки навколо списку параметрів.

Виклик процедур з інших модулів

Процедури, що знаходяться в інших модулях, можуть бути викликані з будь-якого місця проекту. Можливо, доведеться вказати модуль, в якому міститься викликається процедура. Способи виклику відкритих процедур різноманітні і залежать від того, де розташована процедура - в модулі форми, модулі класу або стандартному модулі.

Процедури в формах

Для виклику процедури, що знаходиться в зовнішньому модулі, тобто в не в тому модулі, в якому знаходиться код, з якого здійснюється виклик процедури, перед ім'ям процедури повинно бути вказано ім'я модуля, в якому знаходиться код процедури. Наприклад, якщо код процедури з ім'ям SomeSub знаходиться в модулі форми, названому Form1, то викликати процедуру можна наступним оператором:

Процедури в стандартних модулях

Процедура є унікальною, якщо вона визначена тільки в одному місці.

Якщо ім'я процедури унікально, то включати ім'я модуля в виклик процедури не обов'язково. Зовнішні або внутрішні виклики процедури будуть посилатися на це унікальне ім'я.

Якщо два або більше модулів містять процедури з однаковими іменами, при виклику таких процедур необхідно уточнювати їх за допомогою імені відповідного модуля. Виклик загальної процедури з модуля, що її містить, запускає процедуру цього модуля. Наприклад, якщо процедура з ім'ям CommonName існує і в модулі Module1, і в модулі Module2, то виклик CommonName з модуля Module2 запустить процедуру CommonName модуля Module2, а не процедуру CommonName модуля Module1.

Виклик загальної процедури з іншого модуля повинен уточнювати модуль, в якому розташована процедура. Наприклад, викликати процедуру з ім'ям CommonName модуля Module2 з модуля Module1 можна наступним чином: