VBAдагы "Функция" жана "Суб" процедуралары

Камтылган VBA функциялары

Өзүңүздүн VBA функцияларыңызды түзүүнү баштоодон мурун, Excel VBA кодуңузду жазып жатканда колдоно турган алдын ала орнотулган камтылган функциялардын бай коллекциясына ээ экенин билүү жакшы.

Бул функциялардын тизмесин VBA редакторунда көрүүгө болот:

  • Excel жумушчу китебин ачып, VBA редакторун ишке киргизиңиз (бул үчүн чыкылдатыңыз). Alt + F11), андан кийин басыңыз F2.
  • Экрандын жогорку сол жагындагы ачылуучу тизмеден китепкананы тандаңыз VBA.
  • Камтылган VBA класстарынын жана функцияларынын тизмеси пайда болот. Терезенин ылдый жагында анын кыскача сүрөттөмөсүн көрсөтүү үчүн функциянын атын басыңыз. басуу F1 бул функция үчүн онлайн жардам барагын ачат.

Мындан тышкары, мисалдар менен камтылган VBA функцияларынын толук тизмесин Visual Basic Иштеп чыгуучу борборунан тапса болот.

VBAдагы "Функция" жана "Суб" бажы процедуралары

Excel Visual Basic программасында белгилүү бир тапшырманы аткарган буйруктардын жыйындысы процедурада жайгаштырылат. милдети (Функция) же Sub (Подрограмма). Процедуранын негизги айырмасы милдети и Sub процедура ушундай милдети натыйжаны, процедураны кайтарат Sub – жок.

Ошондуктан, эгерде сиз иш-аракеттерди жасап, кандайдыр бир натыйжаны алышыңыз керек болсо (мисалы, бир нече сандарды кошуу), анда процедура адатта колдонулат. милдети, жана жөн гана кээ бир аракеттерди аткаруу үчүн (мисалы, клеткалар тобунун форматын өзгөртүү) процедураны тандоо керек. Sub.

Аргументтер

VBA процедураларына аргументтердин жардамы менен ар кандай маалыматтар берилиши мүмкүн. Аргументтердин тизмеси процедураны жарыялоодо көрсөтүлөт. Мисалы, жол-жобосу Sub VBAда тандалган диапазондогу ар бир уячага берилген бүтүн санды (Бүтүн) кошот. Сиз бул санды аргумент аркылуу процедурага өткөрө аласыз, мисалы:

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

Процедуралар үчүн аргументтер бар экенин унутпаңыз милдети и Sub VBAда милдеттүү эмес. Кээ бир процедуралар аргументтерди талап кылбайт.

Кошумча аргументтер

VBA процедураларында кошумча аргументтер болушу мүмкүн. Булар колдонуучу кааласа көрсөтө ала турган аргументтер, ал эми алар алынып салынса, процедура алар үчүн демейки маанилерди колдонот.

Мурунку мисалга кайтып келсек, функцияга бүтүн аргументти кошумча кылуу үчүн, ал төмөнкүдөй жарыяланат:

Sub AddToCells(Кошумча i бүтүн сан = 0)

Бул учурда, бүтүн аргумент i демейки 0 болот.

Процедурада бир нече кошумча аргументтер болушу мүмкүн, алардын бардыгы аргументтердин тизмесинин аягында келтирилген.

Аргументтерди маани жана шилтеме боюнча өткөрүү

VBAдагы аргументтер процедурага эки жол менен өтүшү мүмкүн:

  • ByVal – аргументти маани боюнча берүү. Бул процедурага бир гана маани (б.а. аргументтин көчүрмөсү) өткөрүлөт, демек процедуранын ичиндеги аргументке киргизилген өзгөртүүлөр процедурадан чыкканда жоголот дегенди билдирет.
  • ByRef – аргументти шилтеме аркылуу берүү. Башкача айтканда, эстутумдагы аргументтин жайгашкан жеринин иш жүзүндөгү дареги процедурага берилет. Процедуранын ичиндеги аргументке киргизилген бардык өзгөртүүлөр процедурадан чыкканда сакталат.

Ачкыч сөздөрдү колдонуу ByVal or ByRef процедура декларациясында аргументтин процедурага кандайча өтүшүн көрсөтө аласыз. Бул төмөндөгү мисалдарда көрсөтүлгөн:

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 ByRef, анда аргумент шилтеме аркылуу өтөт.

Процедураларды улантуудан мурун милдети и Sub майда-чүйдөсүнө чейин, бул жол-жоболордун бул эки түрүнүн ортосундагы өзгөчөлүктөрүн жана айырмачылыктарды дагы бир карап чыгуу пайдалуу болот. Төмөндө VBA процедураларынын кыскача талкуулары келтирилген милдети и Sub жана жөнөкөй мисалдар көрсөтүлгөн.

VBA процедурасы "Функция"

VBA редактору процедураны тааныйт милдетитөмөнкү ачылыш жана жабуу билдирүүлөрүнүн ортосунда камтылган буйруктар тобуна туш болгондо:

Функция ... Аяктоочу функция

Жогоруда айтылгандай, жол-жобосу милдети VBA менен (каршы Sub) маанини кайтарат. Маанилерди кайтаруу үчүн төмөнкү эрежелер колдонулат:

  • Кайтаруучу маанинин маалымат түрү процедуранын аталышында жарыяланышы керек милдети.
  • Кайтаруу маанисин камтыган өзгөрмө процедура менен бирдей аталышы керек милдети. Бул өзгөрмө өзүнчө жарыялоонун кереги жок, анткени ал ар дайым процедуранын ажырагыс бөлүгү катары бар. милдети.

Бул төмөнкү мисалда жакшы сүрөттөлгөн.

VBA функциясынын мисалы: 3 санга математикалык операцияны аткаруу

Төмөндө VBA процедурасынын кодунун мисалы келтирилген милдети, бул түрдөгү үч аргументти алат Double (кош тактыктагы калкыма чекиттүү сандар). Натыйжада, жол-жобосу башка санын кайтарат Doubleбиринчи эки аргументтин суммасына минус үчүнчү аргументке барабар:

Функция СумМинус(dNum1 Кош, dNum2 Кош, dNum3 Кош) Кош SumMinus = dNum1 + dNum2 - dNum3 Аяктоо Функциясы

Бул абдан жөнөкөй VBA процедурасы милдети аргументтер аркылуу маалыматтардын процедурага кантип өтүшүн көрсөтөт. Процедуранын кайтарылган маалымат түрү катары аныкталганын көрө аласыз Double (сөздөр айтылат Double катары аргументтердин тизмесинен кийин). Бул мисал ошондой эле жол-жобосунун натыйжасын көрсөтөт милдети процедура аты менен бирдей аталыштагы өзгөрмөдө сакталат.

VBA процедурасын "Функция" чакыруу

Жогорудагы жөнөкөй процедура болсо милдети Visual Basic редакторундагы модулга киргизилген, аны башка VBA процедураларынан чакырса болот же Excel иш китебиндеги иш барагында колдонсо болот.

Башка процедурадан VBA процедурасын "Функция" деп атаңыз

процедура милдети башка VBA процедурасынан ошол процедураны жөн гана өзгөрмөгө дайындоо аркылуу чакырса болот. Төмөнкү мисалда процедурага чакыруу көрсөтүлгөн Summinus, жогоруда аныкталган.

Sub main() Кош жалпы = СумМинус (5, 4, 3) Аяктоо Кош катары

Жумуш барагынан VBA процедурасын "Функция" деп атаңыз

VBA процедурасы милдети Excel иш барагынан башка орнотулган Excel функциясы сыяктуу эле чакырылышы мүмкүн. Ошондуктан, мурунку мисалда түзүлгөн жол-жобосу милдети - Summinus иш барагынын уячасына төмөнкү туюнтманы киргизүү менен чакырылышы мүмкүн:

=SumMinus(10, 5, 2)

VBA процедурасы "Sub"

VBA редактору анын алдында процедура бар экенин түшүнөт Subтөмөнкү ачылыш жана жабуу билдирүүлөрүнүн ортосунда камтылган буйруктар тобуна туш болгондо:

Sub ... End Sub

VBA процедурасы "Суб": Мисал 1. Тандалган уячалар диапазонунда борборго тегиздөө жана шрифт өлчөмүн өзгөртүү

Жөнөкөй VBA процедурасынын мисалын карап көрөлү Sub, анын милдети уячалардын тандалган диапазонун форматтоосун өзгөртүү. Уячалар борборлоштурулган (тигинен да, туурасынан да) жана шрифттин өлчөмү колдонуучу белгилегендей өзгөрөт:

Sub Format_Centered_And_Size(Бүтүн сан катары Кошумча iFontSize = 10) Selection.HorizontalAlignment = xlCenter Selection.VerticalAlignment = xlCenter Selection.Font.Size = iFontSize End Sub

Бул процедура Sub аракеттерди жасайт, бирок натыйжа бербейт.

Бул мисалда Кошумча аргумент да колдонулат FontSize. Аргумент болсо FontSize процедурага өткөн эмес Sub, анда анын демейки мааниси 10. Бирок, аргумент болсо FontSize процедурага өттү Sub, анда уячалардын тандалган диапазону колдонуучу белгилеген шрифт өлчөмүнө коюлат.

VBA кошумча процедурасы: 2-мисал: Тандалган уячалар диапазонунда борборго тегиздөө жана калың шрифт

Төмөнкү жол-жобо азыр эле талкууланганга окшош, бирок бул жолу өлчөмдү өзгөртүүнүн ордуна ал тандалган уячалардын диапазонуна калың шрифт стилин колдонот. Бул мисал процедурасы Sub, бул эч кандай аргумент талап кылбайт:

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

Excel VBAдагы "Суб" процедурасын чакыруу

Башка процедурадан VBA процедурасын "Sub" деп атаңыз

VBA процедурасын чакыруу үчүн Sub башка VBA процедурасынан сиз ачкыч сөздү жазышыңыз керек чакыруу, процедуранын аталышы Sub жана андан ары кашаанын ичинде процедуранын аргументтери. Бул төмөндөгү мисалда көрсөтүлгөн:

Sub main() Call Format_Centered_And_Sized(20) End Sub

Эгерде процедура Формат_Борборлоштурулган_жана_өлчөмдүү бирден ашык аргументи бар, алар үтүр менен бөлүнүшү керек. Бул сыяктуу:

Sub main() Чакыруу Format_Centered_And_Sized(arg1, arg2, ...) End Sub

Жумуш барагынан VBA процедурасын "Sub" деп атаңыз

процедура Sub жол-жобосу менен кылса болот эле, түздөн-түз Excel барагынын уячасына кирүү мүмкүн эмес милдетианткени процедура Sub маани бербейт. Бирок, процедуралар Sub, эч кандай аргументтери жок жана катары жарыяланган коомдук (төмөндө көрсөтүлгөндөй) иш барагынын колдонуучулары үчүн жеткиликтүү болот. Ошентип, жогоруда талкууланган жөнөкөй жол-жоболору болсо Sub Visual Basic редакторунда модулга киргизилген, процедура Формат_Борбордуу_Жана_Калың Excel иш барагында жана процедурада колдонуу үчүн жеткиликтүү болот Формат_Борборлоштурулган_жана_өлчөмдүү – жеткиликтүү болбойт, анткени анын аргументтери бар.

Бул жерде процедураны иштетүүнүн (же аткаруунун) оңой жолу Sub, иш барагынан жеткиликтүү:

  • басма сөз Alt + F8 (баскычты басыңыз Alt жана аны басып туруп, баскычты басыңыз F8).
  • Пайда болгон макростордун тизмесинен сиз иштеткиңиз келгенди тандаңыз.
  • басма сөз Run (чуркоо)

Процедураны аткаруу үчүн Sub тез жана оңой, сиз ага клавиатура жарлыгын дайындай аласыз. Бул үчүн:

  • басма сөз Alt + F8.
  • Пайда болгон макростордун тизмесинен клавиатура жарлыгын ыйгаргыңыз келгенди тандаңыз.
  • басма сөз параметрлер (Параметрлер) жана пайда болгон диалог терезесине баскычтоптун жарлыгын киргизиңиз.
  • басма сөз OK жана диалогду жабыңыз макро (Макро).

бургула: Макроско клавиатура жарлыгын дайындоодо, ал Excelде стандарт катары колдонулбагандыгын текшериңиз (мисалы, Ctrl + C). Эгерде сиз буга чейин эле бар баскычтопту тандасаңыз, ал макроско кайра дайындалат жана натыйжада колдонуучу макросту кокусунан башташы мүмкүн.

VBA процедурасынын масштабы

Бул окуу куралынын 2-бөлүгү өзгөрмөлөрдүн жана константалардын көлөмүн жана ачкыч сөздөрдүн ролун талкуулады. коомдук и жеке. Бул ачкыч сөздөрдү VBA процедуралары менен да колдонсо болот:

Коомдук Sub AddToCells(i As Integer) ... Аягы Sub
Эгерде процедуранын декларациясынын алдында ачкыч сөз болсо коомдук, анда процедура ошол VBA долбоорундагы бардык модулдар үчүн жеткиликтүү болот.
Private Sub AddToCells(i As Integer) ... End Sub
Эгерде процедуранын декларациясынын алдында ачкыч сөз болсо жеке, анда бул процедура учурдагы модул үчүн гана жеткиликтүү болот. Аны башка модулда же Excel иш китебинен чакырууга болбойт.

Эгерде VBA процедурасын жарыялоодон мурун экенин унутпаңыз милдети or Sub ачкыч сөз киргизилген эмес, демейки касиет процедура үчүн коюлган коомдук (башкача айтканда, бул VBA долбоорунда бардык жерде жеткиликтүү болот). Бул демейки боюнча өзгөрүлмө декларациялардан айырмаланып турат жеке.

"Функция" жана "Суб" VBA процедураларынан эрте чыгуу

Эгер VBA процедурасынын аткарылышын токтотуу керек болсо милдети or Sub, анын табигый аякташын күтпөстөн, анда бул үчүн операторлор бар Функциядан чыгуу и Sub Sub. Бул операторлордун колдонулушу төмөндө мисал катары жөнөкөй процедураны колдонуу менен көрсөтүлгөн. милдетиАндан аркы операцияларды аткаруу үчүн оң аргумент алууну күткөн А. Эгерде процедурага оң эмес маани берилсе, анда мындан аркы операцияларды аткарууга болбойт, андыктан колдонуучуга ката кабары көрсөтүлүп, процедурадан дароо чыгуу керек:

Функция VAT_Amount(sVAT_Rate As Single) VAT_Amount = 0 If sVAT_Rate <= 0 Анда MsgBox "sVAT_Rate оң маанисин күткөн, бирок алынган" & sVAT_Rate Функциянын бүтүшү, эгерде ... Аяктоо Функция

Сураныч, жол-жобосун аяктаганга чейин эске алыңыз милдети - КНСтин суммасы, камтылган VBA функциясы кодго киргизилген MsgBox, ал колдонуучуга эскертүү калкыма терезесин көрсөтөт.

Таштап Жооп