Функція VBA - виклик, повернене значення та параметри

Цей підручник навчить вас створювати та використовувати функції з параметрами та без них у VBA

VBA містить велику кількість вбудованих функцій для використання, але ви також можете писати власні. Коли ви пишете код у VBA, ви можете записати його у підпроцедурі або функціональній процедурі. Функціональна процедура може повернути значення у ваш код. Це надзвичайно корисно, якщо ви хочете, щоб VBA виконала завдання, щоб повернути результат. Функції VBA також можна викликати з Excel, так само, як і вбудовані функції Excel.

Створення функції без аргументів

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

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

123 Функція GetValue () як ціле числоGetValue = 50Функція завершення

Якби ви запустили функцію, вона завжди повертала б значення 50.

Ви також можете створювати функції, які посилаються на об’єкти у VBA, але вам потрібно використовувати Set Keyword, щоб повернути значення з функції.

123 Функція GetRange () як діапазонВстановити GetRange = Діапазон ("A1: G4")Функція завершення

Якби ви використовували вищезазначену функцію у своєму коді VBA, ця функція завжди повертала б діапазон клітинок від A1 до G4 у будь -якому аркуші, на якому ви працюєте.

Виклик функції з підпроцедури

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

Значення 50 завжди повертається.

Ви також можете викликати функцію GetRange з підпроцедури.

У наведеному вище прикладі функція GetRange викликається підпроцедурою для виділення жирним осередком об’єкта діапазону.

Створення функцій

Єдиний аргумент

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

123 Функція ConvertKilosToPounds (dblKilo як Double) як DoubleПеретворитиKiloToPounds = dblKilo*2.2Функція завершення

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

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

У наведеному вище прикладі ми маємо 2 процедури - кожна з них використовує функцію для обчислення фунтового значення кілограмів, переданих їм у dblKilo Аргумент функції.

Кілька аргументів

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

123 Функція CalculateDayDiff (Date1 як дата, Date2 як дата) як DoubleCalculateDayDiff = Дата2-Дата1Функція завершення

Потім ми можемо викликати функцію, щоб обчислити кількість днів між 2 датами.

Необов’язкові аргументи

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

123456 Функція CalculateDayDiff (Date1 як дата, необов’язкова Date2 як дата) як Double'перевірте другу дату, а якщо її немає, зробіть Date2 рівною сьогоднішній.Якщо Date2 = 0, то Date2 = Дата'обчислити різницюCalculateDayDiff = Дата2-Дата1Функція завершення

Значення аргументу за замовчуванням

Ви також можете встановити значення за замовчуванням необов'язкових аргументів під час створення функції, так що якщо користувач опустить аргумент, замість нього буде використано значення, яке ви вказали за замовчуванням.

1234 Функція CalculateDayDiff (Date1 як дата, необов'язкова Date2 як дата = "06/02/2020") як подвійний'обчислити різницюCalculateDayDiff = Дата2-Дата1Функція завершення

ByVal і ByRef

Коли ви передаєте значення функції, ви можете використовувати ByVal або ByRef ключові слова. Якщо ви пропустіть будь -яке з них, ByRef використовується за замовчуванням.

ByVal означає, що ви передаєте копію змінної функції, тоді як ByRef означає, що ви посилаєтесь на вихідне значення змінної. Коли ви передаєте копію змінної (ByVal), вихідне значення змінної дорівнює НІ змінено, але коли ви посилаєтесь на змінну, вихідне значення змінної змінюється функцією.

1234 Функція GetValue (ByRef intA як ціле число) як ціле числоintA = intA * 4GetValue = intAФункція завершення

У наведеній вище функції ByRef можна опустити, і функція працюватиме так само.

1234 Функція GetValue (intA як ціле число) як ціле числоintA = intA * 4GetValue = intAФункція завершення

Щоб викликати цю функцію, ми можемо запустити підпроцедуру.

123456789 Sub TestValues ​​()Dim intVal як ціле число'заповніть змінну значенням 10intVal = 10'запустіть функцію GetValue і покажіть значення у безпосередньому вікніDebug.Print GetValue (intVal)'показати значення змінної intVal у безпосередньому вікніНалагодження.Надрукувати intValEnd Sub

Зверніть увагу, що вікна налагодження обидва рази показують значення 40. Коли ви передаєте змінній IntVal до функції - значення 10 передається функції та множиться на 4. Використовуючи ключове слово ByRef (або взагалі пропускаючи його), ЗМІНИТЕ значення змінної IntVal. Це відображається, коли ви показуєте спочатку результат функції у безпосередньому вікні (40), а потім значення змінної IntVal у вікні налагодження (також 40).

Якщо ми НЕ хочемо змінювати значення вихідної змінної, ми повинні використовувати ByVal у функції.

1234 Функція GetValue (ByVal intA як ціле число) як ціле числоintA = intA * 4GetValue = intAФункція завершення

Тепер, якщо ми викликаємо функцію з підпроцедури, значення змінної IntVal залишиться на рівні 10.

Функція виходу

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

12345678910111213 Функція FindNumber (strSearch As String) Як ціле числоDim i як ціле число'цикл через кожну букву в рядкуFor i = 1 To Len (strSearch)'якщо буква є числовою, поверніть значення функціїЯкщо IsNumeric (Mid (strSearch, i, 1)) ТодіFindNumber = Mid (strSearch, i, 1)'потім вийдіть із функціїФункція виходуЗакінчити ЯкщоДаліFindNumber = 0Функція завершення

Наведена вище функція прокручуватиме наданий рядок, поки не знайде число, а потім поверне це число з рядка. Він знайде лише перше число в рядку, як і тоді Вихід функція.

Вищевизначену функцію можна викликати підпрограмою Sub, такою як нижче.

1234567 Sub CheckForNumber ()Dim NumIs як Integer'передати текстовий рядок функції пошуку номераNumIs = FindNumber ("Верхній поверх, 8 Оук -Лейн, Техас")'показати результат у безпосередньому вікніНалаштування друку NumIsEnd Sub

Використання функції з аркуша Excel

Окрім виклику функції з коду VBA за допомогою підпроцедури, функцію можна також викликати з листа Excel. Створені вами функції за замовчуванням повинні відображатися у вашому списку функцій у розділі Визначені користувачем списку функцій.

Натисніть на fx , щоб відкрити діалогове вікно Вставити функцію.

Виберіть Визначений користувачем зі Списку категорій

Виберіть потрібну функцію з доступних Користувацькі функції (ОДС).

Крім того, коли ви починаєте писати свою функцію в Excel, вона повинна з'явитися у випадаючому списку функцій.

Якщо ви не хочете, щоб функція була доступна всередині аркуша Excel, вам потрібно поставити приватне слово перед словом функція, коли ви створюєте функцію у своєму коді VBA.

123 Приватна функція CalculateDayDiff (Date1 як дата, Date2 як дата) як DoubleCalculateDayDiff = Дата2-Дата1Функція завершення

Тепер він не відображатиметься у випадаючому списку, де відображатимуться доступні функції Excel.

Цікаво, однак, що ви все ще можете використовувати цю функцію - вона просто не з’явиться у списку під час її пошуку!

Якщо ви оголосили другий аргумент як Необов’язково, ви можете опустити його як на аркуші Excel, так і в коді VBA.

Ви також можете використовувати функцію, створену без аргументів на аркуші Excel.

Ви допоможете розвитку сайту, поділившись сторінкою з друзями

wave wave wave wave wave