Процедури „Функция“ и „Под“ във VBA

Съдържание

Вградени VBA функции

Преди да започнете да създавате свои собствени VBA функции, добре е да знаете, че Excel VBA има богата колекция от предварително изградени вградени функции, които можете да използвате, докато пишете своя код.

Списък с тези функции може да се види в редактора на VBA:

  • Отворете работна книга на Excel и стартирайте VBA редактора (щракнете, за да направите това Alt + F11) и след това натиснете F2.
  • Изберете библиотека от падащия списък в горния ляв ъгъл на екрана VBA.
  • Ще се появи списък с вградени VBA класове и функции. Кликнете върху името на функцията, за да се покаже нейното кратко описание в долната част на прозореца. натискане F1 ще отвори страницата за онлайн помощ за тази функция.

В допълнение, пълен списък с вградени функции на VBA с примери може да бъде намерен в Центъра за разработчици на Visual Basic.

Персонализирани процедури „Function“ и „Sub“ във VBA

В Excel Visual Basic набор от команди, които изпълняват конкретна задача, се поставят в процедура. функция (Функция) или Под (Подпрограма). Основната разлика между процедурите функция и Под това е процедурата функция връща резултат, процедура Под - не.

Ето защо, ако трябва да извършите действия и да получите някакъв резултат (например да сумирате няколко числа), обикновено се използва процедурата функция, а за да извършите просто някои действия (например промяна на форматирането на група клетки), трябва да изберете процедурата Под.

Аргументи

Различни данни могат да бъдат предавани на VBA процедури с помощта на аргументи. Списъкът с аргументи се посочва при деклариране на процедура. Например процедурата Под във VBA добавя даденото цяло число (Integer) към всяка клетка в избрания диапазон. Можете да предадете това число на процедурата, като използвате аргумент, като този:

Sub AddToCells(i като цяло число) ... End Sub

Имайте предвид, че има аргументи за процедури функция и Под във VBA не е задължително. Някои процедури не изискват аргументи.

Незадължителни аргументи

VBA процедурите могат да имат незадължителни аргументи. Това са аргументи, които потребителят може да посочи, ако иска, и ако бъдат пропуснати, процедурата използва стойностите по подразбиране за тях.

Връщайки се към предишния пример, за да направите целочислен аргумент на функция незадължителен, той ще бъде деклариран така:

Sub AddToCells (По избор i като цяло число = 0)

В този случай целочисленият аргумент i по подразбиране ще бъде 0.

Може да има няколко незадължителни аргумента в процедура, всички от които са изброени в края на списъка с аргументи.

Предаване на аргументи по стойност и по препратка

Аргументите във VBA могат да бъдат предадени на процедура по два начина:

  • ByVal – предаване на аргумент по стойност. Това означава, че само стойността (т.е. копие на аргумента) се предава на процедурата и следователно всички промени, направени в аргумента вътре в процедурата, ще бъдат загубени, когато процедурата излезе.
  • от Ref – предаване на аргумент по препратка. Тоест действителният адрес на местоположението на аргумента в паметта се предава на процедурата. Всички промени, направени в аргумент вътре в процедурата, ще бъдат запазени, когато процедурата излезе.

Използване на ключови думи ByVal or от Ref в декларацията на процедурата можете да посочите как аргументът се предава на процедурата. Това е показано в примерите по-долу:

Sub AddToCells(ByVal i As Integer) ... End Sub
В този случай целочисленият аргумент i предава се по стойност. След напускане на процедурата Под всички направени с i промените ще бъдат загубени.
Sub AddToCells(ByRef i As Integer) ... End Sub
В този случай целочисленият аргумент i предадено чрез справка. След напускане на процедурата Под всички направени с i промените ще бъдат съхранени в променливата, която е била предадена на процедурата Под.

Не забравяйте, че аргументите във VBA се предават по препратка по подразбиране. С други думи, ако не се използват ключови думи ByVal or от Ref, тогава аргументът ще бъде предаден чрез препратка.

Преди да продължите с процедурите функция и Под по-подробно ще бъде полезно да разгледаме отново характеристиките и разликите между тези два вида процедури. Следва кратко обсъждане на процедурите на VBA функция и Под и са показани прости примери.

VBA процедура «Функция»

VBA редакторът разпознава процедурата функциякогато срещне група от команди, затворени между следните начални и затварящи изрази:

Функция ... Крайна функция

Както бе споменато по-рано, процедурата функция във VBA (за разлика от Под) връща стойност. За връщаните стойности се прилагат следните правила:

  • Типът данни на върнатата стойност трябва да бъде деклариран в заглавката на процедурата функция.
  • Променливата, която съдържа върнатата стойност, трябва да бъде наречена по същия начин като процедурата функция. Тази променлива не е необходимо да се декларира отделно, тъй като винаги съществува като неразделна част от процедурата. функция.

Това е добре илюстрирано в следния пример.

Пример за функция на VBA: Извършване на математическа операция върху 3 числа

Следното е пример за код на процедура на VBA функция, който приема три аргумента от тип двойно (числа с плаваща запетая с двойна точност). В резултат на това процедурата връща друг номер от тип двойноравна на сумата от първите два аргумента минус третия аргумент:

Функция SumMinus(dNum1 като двойно, dNum2 като двойно, dNum3 като двойно) Като двойно SumMinus = dNum1 + dNum2 - dNum3 Крайна функция

Тази много проста процедура на VBA функция илюстрира как данните се предават на процедура чрез аргументи. Можете да видите, че типът данни, върнат от процедурата, е дефиниран като двойно (думите казват Като двойно след списъка с аргументи). Този пример също показва как резултатът от процедурата функция съхранявани в променлива със същото име като името на процедурата.

Извикване на процедурата на VBA „Функция“

Ако горната проста процедура функция вмъкнат в модул в редактора на Visual Basic, той може да бъде извикан от други VBA процедури или да се използва в работен лист в работна книга на Excel.

Извикайте VBA процедура „Функция“ от друга процедура

Процедура функция може да се извика от друга VBA процедура чрез просто присвояване на тази процедура на променлива. Следващият пример показва извикване на процедура Summinus, което беше дефинирано по-горе.

Sub main() Dim total като Double total = SumMinus(5, 4, 3) End Sub

Извикайте VBA процедура „Функция“ от работен лист

VBA процедура функция може да се извика от работен лист на Excel по същия начин, както всяка друга вградена функция на Excel. Следователно процедурата, създадена в предишния пример функция - Summinus може да се извика чрез въвеждане на следния израз в клетка на работен лист:

=SumMinus(10, 5, 2)

VBA процедура «Sub»

VBA редакторът разбира, че има процедура пред него Подкогато срещне група от команди, затворени между следните начални и затварящи изрази:

Sub ... End Sub

VBA процедура „Sub“: Пример 1. Централно подравняване и промяна на размера на шрифта в избран диапазон от клетки

Помислете за пример за проста процедура на VBA Под, чиято задача е да промени форматирането на избрания диапазон от клетки. Клетките се центрират (както вертикално, така и хоризонтално) и размерът на шрифта се променя на зададения от потребителя:

Sub Format_Centered_And_Sized(По избор iFontSize като цяло число = 10) Selection.HorizontalAlignment = xlCenter Selection.VerticalAlignment = xlCenter Selection.Font.Size = iFontSize End Sub

Тази процедура Под изпълнява действия, но не връща резултат.

Този пример също използва незадължителен аргумент Размер на шрифта. Ако аргументът Размер на шрифта не е преминал на процедура Под, тогава стойността му по подразбиране е 10. Ако обаче аргументът Размер на шрифта премина на процедура Под, тогава избраният диапазон от клетки ще бъде зададен на размера на шрифта, зададен от потребителя.

Подпроцедура на VBA: Пример 2: Централно подравняване и удебелен шрифт в избран диапазон от клетки

Следващата процедура е подобна на току-що обсъдената, но този път, вместо преоразмеряване, тя прилага стил на удебелен шрифт към избрания диапазон от клетки. Това е примерна процедура Под, който не приема аргументи:

Sub Format_Centered_And_Bold() Selection.HorizontalAlignment = xlCenter Selection.VerticalAlignment = xlCenter Selection.Font.Bold = True End Sub

Извикване на процедура „Sub“ в Excel VBA

Извикайте VBA процедура „Sub“ от друга процедура

За извикване на VBA процедура Под от друга VBA процедура, трябва да напишете ключовата дума ПОЗВЪНЯВАНЕ, име на процедура Под и по-нататък в скоби са аргументите на процедурата. Това е показано в примера по-долу:

Sub main() Call Format_Centered_And_Sized(20) End Sub

Ако процедурата Format_Centered_And_Sized има повече от един аргумент, те трябва да бъдат разделени със запетаи. Като този:

Sub main() Call Format_Centered_And_Sized(arg1, arg2, ...) End Sub

Извикайте VBA процедура „Sub“ от работен лист

Процедура Под не може да се въведе директно в клетка на Excel лист, както може да се направи с процедура функциятъй като процедурата Под не връща стойност. Процедурите обаче Под, които нямат аргументи и се декларират като Обществен (както е показано по-долу) ще бъдат достъпни за потребителите на работния лист. По този начин, ако простите процедури, обсъдени по-горе Под вмъкнат в модул в редактора на Visual Basic, процедурата Format_Centered_And_Bold ще бъде достъпен за използване в работен лист на Excel и процедурата Format_Centered_And_Sized – няма да бъде наличен, защото има аргументи.

Ето един лесен начин да стартирате (или изпълните) процедура Под, достъпен от работния лист:

  • Натискане Alt + F8 (натиснете клавиша Друг и докато го държите натиснат, натиснете клавиша F8).
  • В списъка с макроси, който се показва, изберете този, който искате да изпълните.
  • Натискане бягане (бягам)

За извършване на процедура Под бързо и лесно можете да му зададете клавишна комбинация. За това:

  • Натискане Alt + F8.
  • В списъка с макроси, който се показва, изберете този, към който искате да присвоите клавишна комбинация.
  • Натискане параметри (Опции) и в появилия се диалогов прозорец въведете клавишната комбинация.
  • Натискане OK и затворете диалоговия прозорец Макро (Макро).

Внимание: Когато присвоявате клавишна комбинация на макрос, уверете се, че тя не се използва като стандарт в Excel (напр. Ctrl + C). Ако изберете вече съществуваща клавишна комбинация, тя ще бъде преназначена на макроса и в резултат на това потребителят може да стартира макроса случайно.

Обхват на процедурата на VBA

Част 2 от този урок обсъжда обхвата на променливите и константите и ролята на ключовите думи. Обществен и частен. Тези ключови думи могат да се използват и с VBA процедури:

Public Sub AddToCells(i като цяло число) ... End Sub
Ако декларацията на процедурата е предшествана от ключовата дума Обществен, тогава процедурата ще бъде достъпна за всички модули в този VBA проект.
Private Sub AddToCells(i като цяло число) ... End Sub
Ако декларацията на процедурата е предшествана от ключовата дума частен, тогава тази процедура ще бъде достъпна само за текущия модул. Не може да бъде извикан, докато сте в друг модул или от работна книга на Excel.

Не забравяйте, че ако преди да декларирате процедура на VBA функция or Под ключовата дума не е вмъкната, свойството по подразбиране е зададено за процедурата Обществен (тоест ще бъде наличен навсякъде в този VBA проект). Това е в контраст с декларациите на променливи, които по подразбиране са частен.

Ранно излизане от VBA процедури „Функция“ и „Под“

Ако трябва да прекратите изпълнението на VBA процедура функция or Под, без да чака естествения му край, тогава за това има оператори Функция за изход и Излезте от под. Използването на тези оператори е показано по-долу, като се използва проста процедура като пример. функцияA, който очаква да получи положителен аргумент за извършване на по-нататъшни операции. Ако на процедурата бъде предадена неположителна стойност, тогава не могат да се извършват допълнителни операции, така че на потребителя трябва да се покаже съобщение за грешка и процедурата трябва да излезе незабавно:

Функция VAT_Amount(sVAT_Rate As Single) Като единична VAT_Amount = 0 Ако sVAT_Rate <= 0 Then MsgBox "Очаква се положителна стойност на sVAT_Rate, но е получена " & sVAT_Rate Изход от функцията Край Ако ... Край на функцията

Моля, имайте предвид, че преди да завършите процедурата функция - ДДС_Сума, в кода се вмъква вградена VBA функция MsgBox, което показва предупредителен изскачащ прозорец на потребителя.

Оставете коментар