«Функцыя» і «пад» працэдуры ў VBA

Убудаваныя функцыі VBA

Перш чым пачаць ствараць свае ўласныя функцыі VBA, добра ведаць, што Excel VBA мае багатую калекцыю гатовых убудаваных функцый, якія можна выкарыстоўваць падчас напісання кода.

Спіс гэтых функцый можна праглядзець у рэдактары VBA:

  • Адкрыйце кнігу Excel і запусціце рэдактар ​​VBA (націсніце, каб зрабіць гэта Alt + F11), а затым націсніце F2.
  • Выберыце бібліятэку з выпадальнага спісу ў левым верхнім куце экрана VBA.
  • З'явіцца спіс убудаваных класаў і функцый VBA. Націсніце на назву функцыі, каб паказаць яе кароткае апісанне ў ніжняй частцы акна. націсканне F1 адкрые старонку анлайн-даведкі для гэтай функцыі.

Акрамя таго, поўны спіс убудаваных функцый VBA з прыкладамі можна знайсці ў Visual Basic Developer Center.

Карыстальніцкія працэдуры «Функцыя» і «Дапаможнік» у VBA

У Excel Visual Basic набор каманд, якія выконваюць пэўную задачу, змяшчаецца ў працэдуры. функцыя (Функцыя) або Sub (Падпраграма). Асноўнае адрозненне працэдур функцыя и Sub гэта працэдура функцыя вяртае вынік, працэдура Sub – не.

Таму, калі трэба выканаць дзеянні і атрымаць нейкі вынік (напрыклад, прасумаваць некалькі лікаў), то звычайна выкарыстоўваецца працэдура функцыя, а каб проста выканаць нейкія дзеянні (напрыклад, змяніць фарматаванне групы вочак), трэба выбраць працэдуру Sub.

аргументы

З дапамогай аргументаў у працэдуры VBA можна перадаваць розныя даныя. Спіс аргументаў задаецца пры дэкларацыі працэдуры. Напрыклад, працэдура Sub у VBA дадае зададзенае цэлае лік (Integer) у кожную ячэйку ў абраным дыяпазоне. Вы можаце перадаць гэты лік у працэдуру з дапамогай аргументу, напрыклад:

Sub AddToCells(i As Integer) ... End Sub

Майце на ўвазе, што ёсць аргументы за працэдуры функцыя и Sub у VBA не з'яўляецца абавязковым. Некаторыя працэдуры не патрабуюць аргументаў.

Неабавязковыя аргументы

Працэдуры VBA могуць мець неабавязковыя аргументы. Гэта аргументы, якія карыстальнік можа ўказаць, калі захоча, і калі яны апушчаны, працэдура выкарыстоўвае для іх значэнні па змаўчанні.

Вяртаючыся да папярэдняга прыкладу, каб зрабіць цэлы аргумент функцыі неабавязковым, яго трэба аб'явіць так:

Sub AddToCells (неабавязкова i як цэлае = 0)

У дадзеным выпадку, цэлы аргумент i па змаўчанні будзе 0.

У працэдуры можа быць некалькі неабавязковых аргументаў, усе яны пералічаны ў канцы спісу аргументаў.

Перадача аргументаў па значэнні і па спасылцы

Аргументы ў VBA могуць быць перададзены ў працэдуру двума спосабамі:

  • ByVal – перадача аргумента па значэнні. Гэта азначае, што ў працэдуру перадаецца толькі значэнне (гэта значыць копія аргумента), і таму любыя змены, унесеныя ў аргумент ўнутры працэдуры, будуць страчаны пры выхадзе з працэдуры.
  • Аўтар Ref – перадача аргументу па спасылцы. Гэта значыць, фактычны адрас размяшчэння аргумента ў памяці перадаецца працэдуры. Любыя змены, унесеныя ў аргумент ўнутры працэдуры, будуць захаваны пры выхадзе з працэдуры.

Выкарыстанне ключавых слоў ByVal or Аўтар Ref у дэкларацыі працэдуры вы можаце вызначыць, як аргумент перадаецца ў працэдуру. Гэта паказана ў прыкладах ніжэй:

Sub AddToCells(ByVal i As Integer) ... End Sub
У дадзеным выпадку, цэлы аргумент i перадаецца па значэнні. Пасля выхаду з працэдуры Sub усё зроблена з i змены будуць страчаны.
Sub AddToCells(ByRef i As Integer) ... End Sub
У дадзеным выпадку, цэлы аргумент i перадаецца па спасылцы. Пасля выхаду з працэдуры Sub усё зроблена з i змены будуць захаваны ў зменнай, якая была перададзена ў працэдуру Sub.

Памятайце, што аргументы ў VBA па змаўчанні перадаюцца па спасылцы. Іншымі словамі, калі ключавыя словы не выкарыстоўваюцца ByVal or Аўтар Ref, тады аргумент будзе перададзены па спасылцы.

Перш чым прыступаць да працэдур функцыя и Sub больш падрабязна будзе карысна яшчэ раз зірнуць на асаблівасці і адрозненні гэтых двух відаў працэдур. Далей прыведзены кароткія абмеркаванні працэдур VBA функцыя и Sub і паказаны простыя прыклады.

Працэдура VBA «Функцыя»

Рэдактар ​​VBA распазнае працэдуру функцыякалі ён сутыкаецца з групай каманд, уключаных паміж наступнымі адкрывальнымі і зачыняючымі аператарамі:

Функцыя ... Канчатковая функцыя

Як гаварылася раней, працэдура функцыя у VBA (у адрозненне ад Sub) вяртае значэнне. Да вяртаемых значэнняў прымяняюцца наступныя правілы:

  • Тып даных вяртанага значэння павінен быць абвешчаны ў загалоўку працэдуры функцыя.
  • Зменная, якая змяшчае вяртанае значэнне, павінна быць названа так жа, як і працэдура функцыя. Гэтую зменную не трэба аб'яўляць асобна, бо яна заўсёды існуе як неад'емная частка працэдуры. функцыя.

Гэта добра відаць на наступным прыкладзе.

Прыклад функцыі VBA: выкананне матэматычных дзеянняў над 3 лікамі

Ніжэй прыведзены прыклад кода працэдуры VBA функцыя, які прымае тры аргументы тыпу Двайны (лічбы з плаваючай коскай падвойнай дакладнасці). У выніку працэдура вяртае іншы нумар тыпу Двайныроўны суме першых двух аргументаў мінус трэці аргумент:

Функцыя SumMinus(dNum1 як Double, dNum2 як Double, dNum3 як Double) Як Double SumMinus = dNum1 + dNum2 - dNum3 Канчатковая функцыя

Гэта вельмі простая працэдура VBA функцыя ілюструе, як дадзеныя перадаюцца ў працэдуру праз аргументы. Вы бачыце, што тып даных, якія вяртае працэдура, вызначаны як Двайны (словы кажуць Як двайны пасля спісу аргументаў). Гэты прыклад таксама паказвае, як вынік працэдуры функцыя захоўваецца ў зменнай з тым жа імем, што і імя працэдуры.

Выклік працэдуры VBA «Функцыя»

Калі апісаная вышэй простая працэдура функцыя устаўлены ў модуль у рэдактары Visual Basic, яго можна выклікаць з іншых працэдур VBA або выкарыстоўваць на працоўным аркушы ў кнізе Excel.

Выклік працэдуры VBA «Функцыя» з іншай працэдуры

Працэдура функцыя можна выклікаць з іншай працэдуры VBA, проста прысвоіўшы гэтую працэдуру зменнай. У наступным прыкладзе паказаны выклік працэдуры Summinus, які быў вызначаны вышэй.

Sub main() Dim total as Double total = SumMinus(5, 4, 3) End Sub

Выклік працэдуры VBA «Функцыя» з аркуша

Працэдура VBA функцыя можа быць выклікана з аркуша Excel гэтак жа, як і любая іншая ўбудаваная функцыя Excel. Такім чынам, працэдура створана ў папярэднім прыкладзе функцыя - Summinus можна выклікаць, увёўшы наступны выраз у ячэйку працоўнага ліста:

=SumMinus(10, 5, 2)

Працэдура VBA «Sub»

Рэдактар ​​VBA разумее, што перад ім ёсць працэдура Subкалі ён сутыкаецца з групай каманд, уключаных паміж наступнымі адкрывальнымі і зачыняючымі аператарамі:

Sub ... End Sub

Працэдура VBA “Sub”: Прыклад 1. Выраўноўванне па цэнтры і змяненне памеру шрыфта ў выбраным дыяпазоне вочак

Разгледзім прыклад простай працэдуры VBA Sub, задача якога - змяніць фарматаванне вылучанага дыяпазону вочак. Вочкі выраўноўваюцца па цэнтры (вертыкальна і гарызантальна), а памер шрыфта змяняецца на зададзены карыстальнікам:

Sub Format_Centered_And_Sized(Дадаткова iFontSize як цэлае = 10) Selection.HorizontalAlignment = xlCenter Selection.VerticalAlignment = xlCenter Selection.Font.Size = iFontSize End Sub

Гэта працэдура Sub выконвае дзеянні, але не вяртае вынік.

У гэтым прыкладзе таксама выкарыстоўваецца неабавязковы аргумент Памер шрыфта. Калі аргумент Памер шрыфта не прайшлі працэдуру Sub, то яго значэнне па змаўчанні роўна 10. Аднак, калі аргумент Памер шрыфта перайшоў на працэдуру Sub, тады для выбранага дыяпазону вочак будзе ўстаноўлены памер шрыфта, вызначаны карыстальнікам.

Падпрацэдура VBA: Прыклад 2: Выраўноўванне па цэнтры і тлусты шрыфт у выбраным дыяпазоне вочак

Наступная працэдура падобная да той, што толькі што абмяркоўвалася, але на гэты раз замест змены памеру яна прымяняе паўтлусты стыль шрыфта да выбранага дыяпазону вочак. Гэта прыклад працэдуры Sub, які не прымае аргументаў:

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

Выклік «Sub» працэдуры ў Excel VBA

Выклік працэдуры VBA «Sub» з іншай працэдуры

Каб выклікаць працэдуру VBA Sub з іншай працэдуры VBA, вам трэба напісаць ключавое слова Call, назва працэдуры Sub і далей у дужках аргументы працэдуры. Гэта паказана ў прыкладзе ніжэй:

Sub main() Call Format_Centered_And_Sized(20) End Sub

Калі працэдура Фармат_па_цэнтру_і_памеру мае больш за адзін аргумент, яны павінны быць падзеленыя коскамі. Вось так:

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

Выклік працэдуры VBA «Sub» з аркуша

Працэдура Sub нельга ўвесці непасрэдна ў ячэйку ліста Excel, як гэта можна зрабіць з дапамогай працэдуры функцыятаму што працэдура Sub не вяртае значэнне. Аднак працэдуры Sub, якія не маюць аргументаў і аб'яўлены як грамадскага (як паказана ніжэй) будуць даступныя карыстальнікам працоўнага ліста. Такім чынам, калі простыя працэдуры, разгледжаныя вышэй Sub устаўлены ў модуль у рэдактары Visual Basic, працэдура Фармат_па_цэнтру_і_тлусты будзе даступны для выкарыстання ў працоўным аркушы Excel, і працэдура Фармат_па_цэнтру_і_памеру – не будзе даступны, бо мае аргументы.

Вось просты спосаб запусціць (або выканаць) працэдуру Sub, даступны з працоўнага ліста:

  • прэс Alt + F8 (націснуць клавішу Alt і, утрымліваючы яе, націсніце клавішу F8).
  • У спісе макрасаў, які з'явіцца, абярыце той, які вы хочаце запусціць.
  • прэс прагон (бег)

Выканаць працэдуру Sub хутка і лёгка, вы можаце прызначыць яму спалучэнне клавіш. Для гэтага:

  • прэс Alt + F8.
  • У спісе макрасаў, які з'явіцца, абярыце той, якому хочаце прызначыць спалучэнне клавіш.
  • прэс параметры (Параметры) і ў якое з'явілася дыялогавым акне ўвядзіце спалучэнне клавіш.
  • прэс OK і зачыніце дыялогавае акно Macro (Макра).

Увага: Пры прызначэнні спалучэння клавіш для макраса пераканайцеся, што яно не выкарыстоўваецца ў якасці стандартнага ў Excel (напрыклад, Ctrl + C,). Калі вы вылучыце ўжо існуючую камбінацыю клавіш, яна будзе пераназначана макрасу, і ў выніку карыстальнік можа выпадкова запусціць макрас.

Вобласць дзеяння працэдуры VBA

Частка 2 гэтага ўрока абмяркоўвала вобласць прымянення зменных і канстант і ролю ключавых слоў. грамадскага и прыватны. Гэтыя ключавыя словы таксама можна выкарыстоўваць з працэдурамі VBA:

Public Sub AddToCells(i As Integer) ... End Sub
Калі перад дэкларацыяй працэдуры стаіць ключавое слова грамадскага, то працэдура будзе даступная для ўсіх модуляў у гэтым праекце VBA.
Private Sub AddToCells(i As Integer) ... End Sub
Калі перад дэкларацыяй працэдуры стаіць ключавое слова прыватны, то гэтая працэдура будзе даступная толькі для бягучага модуля. Яе нельга выклікаць у любым іншым модулі або з кнігі Excel.

Памятайце, што калі перад дэкларацыяй працэдуры VBA функцыя or Sub ключавое слова не ўстаўлена, для працэдуры ўстаноўлена ўласцівасць па змаўчанні грамадскага (гэта значыць, ён будзе даступны ўсюды ў гэтым праекце VBA). Гэта ў адрозненне ад дэкларацый зменных, якія з'яўляюцца па змаўчанні прыватны.

Датэрміновы выхад з працэдур VBA «Функцыя» і «Дапаможнік»

Калі вам трэба спыніць выкананне працэдуры VBA функцыя or Sub, не чакаючы яго натуральнага заканчэння, то для гэтага ёсць аператары Функцыя выхаду и Выйсці з пад. Выкарыстанне гэтых аператараў паказана ніжэй на прыкладзе простай працэдуры. функцыяA, які чакае атрымаць станоўчы аргумент для выканання далейшых аперацый. Калі ў працэдуру перадаецца недадатнае значэнне, далейшыя аперацыі выконваць нельга, таму карыстальніку павінна быць паказана паведамленне пра памылку, і працэдура павінна неадкладна завяршыцца:

Функцыя VAT_Amount(sVAT_Rate As Single) As Single VAT_Amount = 0 If sVAT_Rate <= 0 Then MsgBox "Чакаецца станоўчае значэнне sVAT_Rate, але атрымана " & sVAT_Rate Выхад з функцыі End If ... End Function

Звярніце ўвагу, што перад завяршэннем працэдуры функцыя - ПДВ_сума, у код устаўлена ўбудаваная функцыя VBA MsgBox, які адлюстроўвае ўсплывальнае акно з папярэджаннем для карыстальніка.

Пакінуць каментар