Բովանդակություն
- Ներկառուցված VBA գործառույթներ
- «Function» և «Sub» մաքսային ընթացակարգերը VBA-ում
- Արձանագրություններ
- VBA ընթացակարգ «Ֆունկցիա»
- VBA ընթացակարգ «Sub»
- VBA ընթացակարգի շրջանակը
- «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- ը, որը ցուցադրում է օգտատիրոջը նախազգուշացնող պատուհան: