Функції-процедури vba

Функція-процедура - це особливий вид процедури VBA, що повертає результат. Функції для-процедури, як і вбудовані функції VBA, можуть мати необов'язкові і іменовані аргументи. Для запису функції-процедури не можна використовувати макрорекордер, хоча можна редагувати записаний рекордером макрос і перетворювати його в функцію-процедуру.

Основна відмінність між функцією-процедурою і іншими процедурами, крім того, що функції повертають значення, а процедури - немає, полягає в тому, що у функції-процедурі використовуються ключові слова Function і End Function.


Function Name ([Arglist]) [As Type]
'VBA Statements
[Name = expression]
End Function

Function - ключове слово, що оголошує початок функції.

Name - ім'я функції. Імена функцій слідують тим же правилам, що і імена інших ідентифікаторів VBA.

Arglist - список аргументів цієї функції, необов'язковий елемент.

Type - будь-який тип значення функції. Якщо тип не визначений, результат, який повертає функція-процедура, має тип Variant.

Name = expression - присвоювання функції, яке вказує VBA, яке значення має повертати функція, необов'язковий елемент. Проте, завжди слід включати оператор присвоювання у функції-процедури.

End Function - ключові слова, які закінчують функцію.

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

Функції-процедури vba

Без використання функції лістинг б виглядав так:

Функції-процедури vba

З цього простого прикладу, думаю, зрозуміла основна ідея використання функцій-процедур - поліпшення Новомосковскбельності програмного коду і його скорочення (іншими словами, функція-процедура пишеться коли в програмному коді більше 2-3 разів зустрічається один і той же "шматок" коду). Дійсно, якби наша функція-процедура складалася не з одного рядка, а, скажімо, з 10 рядків; і програмний код використовував би цю функцію-процедуру 5 разів, то загальний лістинг програми був би менше на 38 рядків.

Як вже зазначалося раніше, VBA передає всі аргументи в функцію-процедуру як типи Variant. Можна оголошувати певні типи даних для кожного аргументу у списку аргументів.

Аргументи з певними типами використовуються за тими ж знайомим причин, по яким використовуються типізовані змінні або результати функції. Визначення типів аргументів для функції-процедури також допомагає користувачеві при виконанні функції вводити аргументи правильного типу в правильному порядку.