Завдання типу необов'язкового аргументу
Для того, щоб правильно використовувати функції і виявляти оператори, які передають функції невірні значення оголошується тип необов'язкового аргументу (інакше вони мають тип Variant). Тип необов'язкового аргументу оголошується тим же способом, що і тип обов'язкового аргументу - за допомогою ключового слова As:
Function NameFunct (tStr As String, Optional neobArgument As Integer) As String
Значення за замовчуванням для необов'язкових аргументів
Можна вказувати VBA привласнювати необов'язкового аргументу значення за замовчуванням. VBA використовує значення за замовчуванням кожен раз, коли функція викликається без цього включеного необов'язкового аргументу.
Function GetBookName (Optional lDflt As String = "Book1") As String
передача аргументів
Існують два способи для передачі інформації в функцію-процедуру: по посиланню (за замовчуванням) і за значенням.
Це означає, що якщо функція змінює значення в будь-якому з аргументів, то вихідні дані також змінюються.
При передачі аргументу за значенням VBA робить копію вихідних даних і передає цю копію функції. Якщо функція змінює значення в аргументі, переданому за значенням, змінюється тільки копія даних, а вихідні дані не змінюються.
Оскільки передача за посиланням дозволяє функції змінювати значення вихідних даних її аргументів, аргументи, що передаються по посиланню, можуть отримати небажані побічні значення.
У лістингу, представленому вище, показано, що перед застосуванням програми Argument строкова змінна s1 містила текстову рядок в нижньому регістрі, а після застосування функції вона вже містить рядок у верхньому регістрі.
Строго кажучи, побічні результати є необов'язковими і в більшості випадків - небажаними. Для попередження таких побічних результатів необхідно, щоб функція працювала з копією значення аргументу, а не з вихідними даними.
Щоб явно вказати, передає VBA аргумент за значенням або за посиланням, треба використовувати ключові слова ByVal, ByRef перед аргументом, у якому ви хочете метод передачі.
Слід оголошувати аргумент з ключовим словом ByVal для передачі його за значенням, якщо є сумніви, чи слід передавати цей конкретний аргумент за посиланням або за значенням.