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 можна наступним чином: