«Function» և «Sub» ընթացակարգերը VBA-ում

Բովանդակություն

Ներկառուցված VBA գործառույթներ

Նախքան սկսեք ստեղծել ձեր սեփական VBA գործառույթները, լավ է իմանալ, որ Excel VBA-ն ունի ներկառուցված ներկառուցված գործառույթների հարուստ հավաքածու, որոնք կարող եք օգտագործել ձեր կոդը գրելիս:

Այս գործառույթների ցանկը կարելի է դիտել VBA խմբագրում.

  • Բացեք Excel աշխատանքային գիրքը և գործարկեք VBA խմբագրիչը (սեղմեք դա անելու համար Alt + F11), ապա սեղմեք F2.
  • Ընտրեք գրադարան էկրանի վերևի ձախ մասում գտնվող բացվող ցանկից VBA.
  • Ներկառուցված VBA դասերի և գործառույթների ցանկը կհայտնվի: Սեղմեք ֆունկցիայի անվան վրա՝ պատուհանի ներքևում դրա հակիրճ նկարագրությունը ցուցադրելու համար: սեղմելով F1 կբացի առցանց օգնության էջը այդ հատկության համար:

Բացի այդ, ներկառուցված VBA գործառույթների ամբողջական ցանկը օրինակներով կարելի է գտնել Visual Basic Developer Center-ում:

«Function» և «Sub» մաքսային ընթացակարգերը VBA-ում

Excel Visual Basic-ում հրամանների մի շարք, որոնք կատարում են կոնկրետ առաջադրանք, տեղադրվում են ընթացակարգի մեջ: ֆունկցիա (գործառույթ) կամ Sub (Ենթածրագիր): Ընթացակարգերի հիմնական տարբերությունը ֆունկցիա и Sub դա է ընթացակարգը ֆունկցիա վերադարձի արդյունք, ընթացակարգ Sub - ոչ:

Հետևաբար, եթե ձեզ անհրաժեշտ է կատարել գործողություններ և ստանալ որոշակի արդյունք (օրինակ, գումարել մի քանի թվեր), ապա սովորաբար օգտագործվում է ընթացակարգը. ֆունկցիա, և պարզապես որոշ գործողություններ կատարելու համար (օրինակ՝ փոխել մի խումբ բջիջների ձևաչափումը), դուք պետք է ընտրեք ընթացակարգը. Sub.

Արձանագրություններ

Տարբեր տվյալներ կարող են փոխանցվել VBA պրոցեդուրաներին՝ օգտագործելով փաստարկներ: Փաստարկների ցանկը նշվում է ընթացակարգը հայտարարելիս: Օրինակ, ընթացակարգը Sub VBA-ում ավելացնում է տրված ամբողջ թիվը (Integer) ընտրված տիրույթի յուրաքանչյուր բջիջին: Դուք կարող եք այս թիվը փոխանցել ընթացակարգին, օգտագործելով արգումենտ, այսպես.

Sub AddToCells(i As Integer) ... Վերջ Ենթ

Հիշեք, որ ընթացակարգերի համար փաստարկներ ունենալը ֆունկցիա и Sub VBA-ում պարտադիր չէ: Որոշ ընթացակարգեր չեն պահանջում փաստարկներ:

Ընտրովի փաստարկներ

VBA ընթացակարգերը կարող են ունենալ կամընտիր փաստարկներ: Սրանք փաստարկներ են, որոնք օգտագործողը կարող է նշել, եթե ցանկանում է, և եթե դրանք բաց թողնվեն, ապա ընթացակարգը օգտագործում է լռելյայն արժեքները նրանց համար:

Վերադառնալով նախորդ օրինակին, ֆունկցիայի ամբողջական արգումենտը կամընտիր դարձնելու համար այն կհայտարարվի այսպես.

Sub AddToCells (ըստ ցանկության i As Integer = 0)

Այս դեպքում՝ ամբողջ թվի արգումենտը i լռելյայն կլինի 0:

Ընթացակարգում կարող են լինել մի քանի կամընտիր փաստարկներ, որոնք բոլորը նշված են փաստարկների ցանկի վերջում:

Փաստարկների փոխանցում ըստ արժեքի և հղումների

VBA-ում փաստարկները կարող են փոխանցվել ընթացակարգին երկու եղանակով.

  • ByVal- ը - փաստարկի փոխանցում ըստ արժեքի: Սա նշանակում է, որ միայն արժեքը (այսինքն՝ արգումենտի պատճենը) է փոխանցվում ընթացակարգին, և հետևաբար պրոցեդուրան դուրս գալուց հետո արգումենտում կատարված ցանկացած փոփոխություն կկորչի:
  • ByRef- ը - փաստարկի փոխանցումը հղումով: Այսինքն՝ հիշողության մեջ փաստարկի գտնվելու վայրի փաստացի հասցեն փոխանցվում է ընթացակարգին։ Ընթացակարգի ներսում արգումենտում կատարված ցանկացած փոփոխություն կպահվի, երբ պրոցեդուրան դուրս գա:

Օգտագործելով հիմնաբառեր ByVal- ը or ByRef- ը ընթացակարգի հայտարարագրում կարող եք նշել, թե ինչպես է փաստարկը փոխանցվում ընթացակարգին: Սա ցույց է տրված ստորև բերված օրինակներում.

Sub AddToCells (ByVal i As Integer) ... Վերջ Ենթ
Այս դեպքում՝ ամբողջ թվի արգումենտը i անցել է արժեքով. Պրոցեդուրան թողնելուց հետո Sub բոլորը պատրաստված են i փոփոխությունները կկորչեն.
Sub AddToCells (ByRef i As Integer) ... Վերջ Ենթ
Այս դեպքում՝ ամբողջ թվի արգումենտը 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 ընթացակարգը ֆունկցիա ցույց է տալիս, թե ինչպես են տվյալները փոխանցվում ընթացակարգին փաստարկների միջոցով: Դուք կարող եք տեսնել, որ ընթացակարգով վերադարձված տվյալների տեսակը սահմանվում է որպես կրկնակի (բառերն ասում են Որպես կրկնակի փաստարկների ցանկից հետո): Այս օրինակը նաև ցույց է տալիս, թե ինչպես է արդյունքը ընթացակարգի ֆունկցիա պահվում է նույն անունով փոփոխականում, ինչ ընթացակարգի անվանումը:

VBA պրոցեդուրան անվանել «Ֆունկցիա»

Եթե ​​վերը նշված պարզ ընթացակարգը ֆունկցիա Visual Basic խմբագրիչում տեղադրված մոդուլի մեջ այն կարելի է կանչել այլ VBA պրոցեդուրաներից կամ օգտագործել Excel աշխատանքային գրքույկի աշխատաթերթում:

Անվանեք VBA պրոցեդուրան «Ֆունկցիա» մեկ այլ պրոցեդուրայից

ընթացակարգ ֆունկցիա կարելի է կանչել մեկ այլ VBA պրոցեդուրայից՝ պարզապես այդ պրոցեդուրան վերագրելով փոփոխականին: Հետևյալ օրինակը ցույց է տալիս ընթացակարգի կանչ Սումմինուս, որը սահմանվել է վերևում։

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

Աշխատանքային թերթիկից կանչեք VBA պրոցեդուրա «Ֆունկցիա»:

VBA ընթացակարգ ֆունկցիա կարելի է կանչել Excel-ի աշխատաթերթից այնպես, ինչպես ցանկացած այլ ներկառուցված Excel ֆունկցիա: Հետևաբար, նախորդ օրինակում ստեղծված ընթացակարգը ֆունկցիա - Սումմինուս կարելի է կանչել՝ աշխատանքային թերթիկի բջիջ մուտքագրելով հետևյալ արտահայտությունը.

=SumMinus(10, 5, 2)

VBA ընթացակարգ «Sub»

VBA-ի խմբագիրը հասկանում է, որ դրա դիմաց ընթացակարգ կա Subերբ այն հանդիպում է մի խումբ հրամանների, որոնք փակված են հետևյալ բացման և փակման հայտարարությունների միջև.

Ենթ ... Վերջ Ենթ

VBA ընթացակարգ «Sub». Օրինակ 1. Կենտրոնի հավասարեցումը և տառաչափի փոփոխությունը բջիջների ընտրված տիրույթում

Դիտարկենք պարզ VBA ընթացակարգի օրինակ Sub, որի խնդիրն է փոխել ընտրված բջիջների տիրույթի ֆորմատավորումը։ Բջիջները կենտրոնացված են (և ուղղահայաց և հորիզոնական) և տառատեսակի չափը փոխվում է օգտագործողի կողմից նշվածի.

Sub Format_Center_And_Sized (ըստ ցանկության iFontSize As Integer = 10) Selection.HorizontalAlignment = xlCenter Selection.VerticalAlignment = xlCenter Selection.Font.Size = iFontSize End Sub

Այս ընթացակարգը Sub կատարում է գործողություններ, բայց արդյունք չի տալիս:

Այս օրինակը նաև օգտագործում է Ընտրովի արգումենտ Տառատեսակի չափը. Եթե ​​փաստարկը Տառատեսակի չափը ընթացակարգի չի անցել Sub, ապա դրա լռելյայն արժեքը 10 է։ Այնուամենայնիվ, եթե արգումենտը Տառատեսակի չափը անցել է ընթացակարգի Sub, ապա ընտրված բջիջների տիրույթը կսահմանվի օգտագործողի կողմից նշված տառաչափի չափով:

VBA ենթակարգ. Օրինակ 2. Կենտրոնում հավասարեցնել և թավ տառատեսակը բջիջների ընտրված տիրույթում

Հետևյալ ընթացակարգը նման է նոր քննարկվածին, բայց այս անգամ, չափափոխելու փոխարեն, այն կիրառում է համարձակ տառատեսակի ոճ բջիջների ընտրված տիրույթում: Սա օրինակ ընթացակարգ է Sub, որը չի ընդունում փաստարկներ.

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

Զանգահարելու «Sub» կարգը Excel VBA-ում

Զանգահարեք VBA ընթացակարգը «Sub» մեկ այլ ընթացակարգից

VBA պրոցեդուրա կանչելու համար Sub մեկ այլ VBA ընթացակարգից, դուք պետք է գրեք հիմնաբառը Կոչ, ընթացակարգի անվանումը Sub իսկ հետագա փակագծերում՝ ընթացակարգի փաստարկները։ Սա ցույց է տրված ստորև բերված օրինակում.

Sub main() Call Format_Centered_And_Sized(20) End Sub

Եթե ​​ընթացակարգը Format_centred_and_sized ունի մեկից ավելի արգումենտ, դրանք պետք է բաժանվեն ստորակետերով: Սրա նման:

Sub main() Call Format_Centred_And_Sized(arg1, arg2, ...) Ավարտել ենթ.

Զանգահարեք VBA ընթացակարգը «Sub» աշխատաթերթից

ընթացակարգ Sub չի կարող ուղղակիորեն մուտքագրվել Excel թերթիկի բջիջ, ինչպես դա կարելի է անել ընթացակարգով ֆունկցիաքանի որ ընթացակարգը Sub արժեք չի վերադարձնում: Այնուամենայնիվ, ընթացակարգերը Sub, որոնք չունեն փաստարկներ և հայտարարված են որպես Public (ինչպես ցույց է տրված ստորև) հասանելի կլինի աշխատաթերթի օգտագործողներին: Այսպիսով, եթե վերը քննարկված պարզ ընթացակարգերը Sub Տեղադրված մոդուլի մեջ Visual Basic Editor-ում, ընթացակարգը Format_Centered_And_Bold հասանելի կլինի Excel-ի աշխատաթերթում օգտագործելու համար և ընթացակարգը Format_centred_and_sized – հասանելի չի լինի, քանի որ այն ունի փաստարկներ:

Ահա ընթացակարգը գործարկելու (կամ իրականացնելու) հեշտ միջոց Sub, հասանելի է աշխատանքային թերթիկից.

  • մամուլ Alt + F8 (սեղմեք ստեղնը ալտ և պահելով այն սեղմեք ստեղնը F8).
  • Հայտնվող մակրոների ցանկում ընտրեք այն մեկը, որը ցանկանում եք գործարկել:
  • մամուլ Վազում (վազել)

Պրոցեդուրա իրականացնելու համար Sub արագ և հեշտությամբ, դուք կարող եք ստեղնաշարի դյուրանցում նշանակել դրան: Սրա համար:

  • մամուլ Alt + F8.
  • Հայտնվող մակրոների ցանկում ընտրեք այն մեկը, որին ցանկանում եք նշանակել ստեղնաշարի դյուրանցում:
  • մամուլ Պարամետրեր (Ընտրանքներ) և երևացող երկխոսության վանդակում մուտքագրեք ստեղնաշարի դյուրանցումը:
  • մամուլ OK և փակիր երկխոսությունը Մակրո (Մակրո):

Ուշադրություն Մակրոին ստեղնաշարի դյուրանցում նշանակելիս համոզվեք, որ այն չի օգտագործվում որպես ստանդարտ Excel-ում (օրինակ. Ctrl + C) Եթե ​​ընտրեք արդեն գոյություն ունեցող ստեղնաշարի դյուրանցումը, այն կվերահանձնվի մակրոյին, և արդյունքում օգտագործողը կարող է պատահաբար սկսել մակրոն:

VBA ընթացակարգի շրջանակը

Այս ձեռնարկի 2-րդ մասում քննարկվում էր փոփոխականների և հաստատունների շրջանակը և հիմնաբառերի դերը: Public и Անձնական. Այս հիմնաբառերը կարող են օգտագործվել նաև VBA ընթացակարգերի հետ.

Public Sub AddToCells(i As Integer) ... Վերջ Ենթ
Եթե ​​ընթացակարգի հայտարարագրին նախորդում է բանալի բառը Public, ապա ընթացակարգը հասանելի կլինի այդ VBA նախագծի բոլոր մոդուլներին։
Մասնավոր ենթաօրենսդրական AddToCells(i As Integer) ... Վերջ Ենթ
Եթե ​​ընթացակարգի հայտարարագրին նախորդում է բանալի բառը Անձնական, ապա այս ընթացակարգը հասանելի կլինի միայն ընթացիկ մոդուլի համար։ Այն չի կարող կանչվել որևէ այլ մոդուլում կամ Excel աշխատանքային գրքույկից:

Հիշեք, որ եթե նախքան VBA ընթացակարգը հայտարարելը ֆունկցիա or Sub բանալի բառը տեղադրված չէ, ընթացակարգի համար սահմանված է լռելյայն հատկությունը Public (այսինքն, այն հասանելի կլինի ամենուր այս VBA նախագծում): Սա ի տարբերություն փոփոխական հայտարարագրերի, որոնք լռելյայն են Անձնական.

«Function» և «Sub» VBA ընթացակարգերից վաղաժամկետ ելք

Եթե ​​Ձեզ անհրաժեշտ է դադարեցնել VBA ընթացակարգի կատարումը ֆունկցիա or Sub, չսպասելով դրա բնական ավարտին, ապա դրա համար կան օպերատորներ Ելքի գործառույթ и Ելք ենթ. Այս օպերատորների օգտագործումը ներկայացված է ստորև՝ օգտագործելով պարզ ընթացակարգը որպես օրինակ: ֆունկցիաA, որն ակնկալում է ստանալ դրական փաստարկ՝ հետագա գործողություններ կատարելու համար: Եթե ​​ընթացակարգին փոխանցվում է ոչ դրական արժեք, ապա այլ գործողություններ չեն կարող կատարվել, ուստի օգտագործողին պետք է ցույց տրվի սխալի հաղորդագրություն, և ընթացակարգը պետք է անմիջապես դուրս գա.

Գործառույթ VAT_Amount(sVAT_Rate As Single) As Single VAT_Amount = 0 Եթե sVAT_Rate <= 0 Այնուհետև MsgBox «Սպասվում էր sVAT_Rate-ի դրական արժեք, բայց ստացվեց» և sVAT_Rate Ելքի ֆունկցիան ավարտվում է, եթե ... Վերջ գործառույթը

Խնդրում ենք նկատի ունենալ, որ նախքան ընթացակարգը ավարտելը ֆունկցիա - ԱԱՀ_Գումար, կոդի մեջ տեղադրվում է ներկառուցված VBA ֆունկցիա MsgBox- ը, որը ցուցադրում է օգտատիրոջը նախազգուշացնող պատուհան:

Թողնել գրառում