9.2. Створення та використання функцій.

Оголошення функції.

Функція відрізняється від процедури тим, що по-перше результатом є її ім’я, а по-друге, вона викликається в операторі присвоювання.

Оголошення функції здійснюється за такою формою:

Private Function імя(формальні параметри) As тип

Тіло функції

End Function

де Private, Function, End – службові слова,

ім’я – ім’я функції, під яким вона буде використовуватись;

формальні параметри – параметри процедури, які призначені для обміну даними з головною програмою;

тип – задає тип результату виконання функції;

тіло функції – оператори, що задають опрацювання даних у функції. В тілі обов’язково повинен бути оператор присвоювання, який в лівій частині містить ім’я функції. Цей оператор задає результат її роботи.

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

Приклад

Private Function Sum(x%, y%) as Integer

 z = x + y

 Sum = z

End Sub

Виклик функції здійснюється в операторі присвоювання.

c=Sum(a,b)

Способи передачі параметрів.

При оголошенні функції користувача виникає потреба передбачити ситуацію, коли деякі параметри (вихідні дані) при її використанні можуть бути пропущені. Тоді перед визначенням такого параметру в заголовку функції потрібно вказати службове слово Optional. Слід пам’ятати, що такий параметр повинен обов’язково бути останнім у списку параметрів, або всі наступні параметри також повинні оголошуватись як необов’язкові.

Приклад

Private Function Example_1(x%, y%, Optional z%) as Integer

Передача параметрів (вихідних даних) може здійснюватись за посиланням, або за значенням. Для оголошення змінної, передача даних для якої здійснюється за посиланням, використовується службове слово (префікс оголошення) ByRef. За умовчанням VBA використовує саме цей тип передачі параметрів. В такому випадку замість формального параметра передається адреса фактичного параметра. Якщо у функції передбачена зміна значення цього параметра, то ця зміна буде зафіксована, що може мати негативні наслідки. Для того, щоб результат виконання функції не мав впливу на вихідні параметри, їх потрібно передавати за значенням Для цього перед оголошенням параметра необхідно вказати службове слово ByVal. В такому випадку для кожного фактичного параметру при викликові функції створюється його копія, значення якої і опрацьовується в тілі функції. Істинне значення параметра залишається незмінним. В наступному прикладі оголошені три змінних. Для першої передача буде здійснюватись за посиланням, для другої – за значенням. Оскільки для третьої префікс оголошення відсутній, то передача даних для неї також буде здійснюватись за посиланням.

Приклад.

Private Function Example_2(ByRef x%, ByVal y%, z%) as Integer

Іноді при використанні допоміжного алгоритму потрібно передати невизначену наперед кількість параметрів. Наприклад, функція знаходить середнє значення чисел, кількість яких наперед невідома. В такому випадку параметр оголошується як динамічний масив даних. Перед параметром потрібно вказати службове слово ParamArray. Сам параметр поовинний мати тип Variant.

Приклад.

Private Function Example_3(ParamArray a As Variant) as Integer

Таку функцію можна викликати з довільною кількістю параметрів, що робить її більш універсальною. Однак швидкість виконання такої функції буде нижчоюдані типу Variant обробляються повільніше і займають в памяті компютера більше місця.

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 
25 26 27 28  Наверх ↑