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 Integer) ... End Sub

Процедуралар үшін дәлелдер бар екенін есте сақтаңыз функция и Sub VBA-да міндетті емес. Кейбір процедуралар дәлелдерді қажет етпейді.

Қосымша дәлелдер

VBA процедураларында қосымша дәлелдер болуы мүмкін. Бұл пайдаланушы қалаған жағдайда көрсете алатын аргументтер, ал егер олар алынып тасталса, процедура олар үшін әдепкі мәндерді пайдаланады.

Алдыңғы мысалға оралсақ, функцияға бүтін аргументті қосымша ету үшін ол келесідей жарияланады:

Sub AddToCells(міндетті емес i бүтін сан = 0)

Бұл жағдайда бүтін аргумент i әдепкі 0 болады.

Процедурада бірнеше қосымша аргументтер болуы мүмкін, олардың барлығы дәлелдер тізімінің соңында тізімделеді.

Аргументтерді мән және сілтеме бойынша беру

VBA аргументтер процедураға екі жолмен берілуі мүмкін:

  • ByVal – мән бойынша аргумент беру. Бұл процедураға тек мән (яғни аргументтің көшірмесі) жіберілетінін білдіреді, сондықтан процедураның ішіндегі аргументке енгізілген кез келген өзгертулер процедурадан шыққан кезде жоғалады.
  • Сипаттама ByRef ара пайдаланылады – дәлелді сілтеме арқылы беру. Яғни жадтағы аргумент орнының нақты адресі процедураға беріледі. Процедура ішіндегі аргументке жасалған кез келген өзгертулер процедурадан шыққан кезде сақталады.

Негізгі сөздерді қолдану ByVal or Сипаттама ByRef ара пайдаланылады процедура декларациясында аргументтің процедураға қалай жіберілетінін көрсетуге болады. Бұл төмендегі мысалдарда көрсетілген:

Sub AddToCells(ByVal i Integer ретінде) ... End Sub
Бұл жағдайда бүтін аргумент i мәні бойынша өтті. Процедурадан шыққаннан кейін Sub барлығымен жасалған i өзгерістер жоғалады.
Sub AddToCells(ByRef i Integer ретінде) ... End Sub
Бұл жағдайда бүтін аргумент i сілтеме бойынша өтті. Процедурадан шыққаннан кейін Sub барлығымен жасалған i өзгертулер процедураға жіберілген айнымалыда сақталады Sub.

VBA аргументтер әдепкі бойынша сілтеме арқылы берілетінін есте сақтаңыз. Басқаша айтқанда, егер кілт сөздер пайдаланылмаса ByVal or Сипаттама ByRef ара пайдаланылады, содан кейін аргумент сілтеме арқылы беріледі.

Процедураларды жалғастырмас бұрын функция и Sub толығырақ айтқанда, процедуралардың осы екі түрінің ерекшеліктері мен айырмашылықтарын тағы бір рет қарастыру пайдалы болады. Төменде VBA процедураларының қысқаша талқылаулары берілген функция и Sub және қарапайым мысалдар көрсетілген.

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

VBA өңдегіші процедураны таниды функцияол келесі ашу және жабу операторларының арасында орналасқан командалар тобына тап болған кезде:

Функция ... Соңғы функция

Жоғарыда айтылғандай, процедура функция VBA-да (қарсы Sub) мәнді қайтарады. Мәндерді қайтару үшін келесі ережелер қолданылады:

  • Қайтарылатын мәннің деректер түрі процедураның тақырыбында жариялануы керек функция.
  • Қайтару мәнін қамтитын айнымалы мән процедурамен бірдей аталу керек функция. Бұл айнымалыны бөлек жариялаудың қажеті жоқ, өйткені ол әрқашан процедураның ажырамас бөлігі ретінде болады. функция.

Бұл келесі мысалда жақсы көрсетілген.

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

Төменде VBA процедура кодының мысалы келтірілген функция, ол түрдегі үш аргументті қабылдайды қос (екі дәлдіктегі өзгермелі нүктелі сандар). Нәтижесінде, процедура түрдің басқа санын қайтарады қосбірінші екі аргументтің қосындысынан үшінші аргументті шегергенге тең:

Функция SumMinus(dNum1 қосарлы, dNum2 қосарлы, dNum3 қосарлы) Қос қосынды ретінде Минус = dNum1 + dNum2 - dNum3 Соңы Функция

Бұл өте қарапайым VBA процедурасы функция аргументтер арқылы деректердің процедураға қалай жіберілетінін көрсетеді. Процедура арқылы қайтарылатын деректер түрі ретінде анықталғанын көруге болады қос (сөздер айтады Double ретінде дәлелдер тізімінен кейін). Бұл мысал процедураның нәтижесі қалай болатынын да көрсетеді функция процедура атымен бірдей айнымалыда сақталады.

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

Жоғарыдағы қарапайым процедура болса функция Visual Basic өңдегішіндегі модульге кірістірілген, оны басқа VBA процедураларынан шақыруға немесе Excel жұмыс кітабындағы жұмыс парағында пайдалануға болады.

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

рәсім функция сол процедураны айнымалыға жай тағайындау арқылы басқа VBA процедурасынан шақыруға болады. Келесі мысал процедураға шақыруды көрсетеді Жиынтық, ол жоғарыда анықталған болатын.

Қосалқы негізгі() Қосарланған жалпы = ҚосындыМинус(5, 4, 3) Соңы Ішкі

Жұмыс парағынан VBA процедурасын «Функция» деп атаңыз

VBA процедурасы функция Excel жұмыс парағынан кез келген басқа кірістірілген Excel функциясы сияқты шақыруға болады. Сондықтан алдыңғы мысалда жасалған процедура функция - Жиынтық келесі өрнекті жұмыс парағы ұяшығына енгізу арқылы шақыруға болады:

=SumMinus(10, 5, 2)

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

VBA редакторы оның алдында процедура бар екенін түсінеді Subол келесі ашу және жабу операторларының арасында орналасқан командалар тобына тап болған кезде:

Ішкі ... Соңы Ішкі

VBA процедурасы "Қосымша": 1-мысал. Таңдалған ұяшықтар ауқымындағы орталыққа туралау және қаріп өлшемін өзгерту

Қарапайым VBA процедурасының мысалын қарастырыңыз Sub, оның міндеті ұяшықтардың таңдалған ауқымының пішімдеуін өзгерту болып табылады. Ұяшықтар ортаға (тігінен де, көлденеңінен де) орналастырылған және қаріп өлшемі пайдаланушы көрсеткендей өзгертілген:

Ішкі пішім_орталықтандырылған_және_өлшемді(қосымша iFontSize ретінде бүтін сан = 10) Selection.HorizontalAlignment = xlCenter таңдауы.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

Excel VBA бағдарламасындағы «Қосымша» процедурасын шақыру

Басқа процедурадан VBA процедурасын «Sub» деп атаңыз

VBA процедурасын шақыру Sub басқа VBA процедурасынан кілт сөзді жазу керек шақыру, процедура атауы 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 және диалогты жабыңыз Макро (Макро).

Назар: Макросқа пернелер тіркесімін тағайындағанда, оның Excel бағдарламасында стандартты ретінде пайдаланылмағанына көз жеткізіңіз (мысалы, Ctrl + C). Егер бұрыннан бар пернелер тіркесімін таңдасаңыз, ол макросқа қайта тағайындалады және нәтижесінде пайдаланушы макросты кездейсоқ іске қосуы мүмкін.

VBA процедурасының ауқымы

Осы оқу құралының 2-бөлімінде айнымалылар мен тұрақтылар ауқымы және кілт сөздердің рөлі талқыланды. қоғамдық и жеке. Бұл кілт сөздерді VBA процедураларымен де пайдалануға болады:

Жалпы ішкі AddToCells(i Integer) ... Соңы Ішкі
Процедураны жариялаудың алдында кілт сөз болса қоғамдық, содан кейін процедура сол VBA жобасындағы барлық модульдерге қолжетімді болады.
Жеке қосалқы AddToCells(i Integer) ... End Sub
Процедураны жариялаудың алдында кілт сөз болса жеке, онда бұл процедура тек ағымдағы модуль үшін қол жетімді болады. Оны кез келген басқа модульде немесе Excel жұмыс кітабынан шақыру мүмкін емес.

Есіңізде болсын, егер VBA процедурасын жарияламас бұрын функция or Sub кілт сөз кірістірілмеген, әдепкі сипат процедура үшін орнатылған қоғамдық (яғни, ол осы VBA жобасында барлық жерде қолжетімді болады). Бұл әдепкі бойынша айнымалы мәлімдемелерден айырмашылығы жеке.

«Function» және «Sub» VBA процедураларынан ерте шығу

VBA процедурасының орындалуын тоқтату қажет болса функция or Sub, оның табиғи аяқталуын күтпестен, бұл үшін операторлар бар Шығу функциясы и Sub бөлімінен шығу. Бұл операторларды пайдалану мысал ретінде төменде қарапайым процедура арқылы көрсетілген. функцияОдан әрі әрекеттерді орындау үшін оң аргумент алуды күтетін A. Егер процедураға оң емес мән берілсе, одан әрі әрекеттерді орындау мүмкін емес, сондықтан пайдаланушыға қате туралы хабарды көрсету керек және процедурадан дереу шығу керек:

Функция VAT_Amount(sVAT_Rate as Single) VAT_Amount = 0 If sVAT_Rate <= 0, содан кейін MsgBox "sVAT_Rate оң мәнін күтті, бірақ алынды" & sVAT_Rate Функцияның аяқталуы, егер ... аяқталса.

Процедураны аяқтамас бұрын ескеріңіз функция - ҚҚС_сомасы, кодқа кірістірілген VBA функциясы енгізілген MsgBox, ол пайдаланушыға ескерту қалқымалы терезесін көрсетеді.

пікір қалдыру