Փոփոխականներ և հաստատուններ VBA-ում

VBA-ում, ինչպես ցանկացած այլ ծրագրավորման լեզվում, փոփոխականները և հաստատունները օգտագործվում են ցանկացած արժեք պահելու համար: Ինչպես ենթադրում է անունը, փոփոխականները կարող են փոխվել, մինչդեռ հաստատունները պահպանում են ֆիքսված արժեքներ:

Օրինակ՝ հաստատուն Pi պահպանում է 3,14159265 արժեքը… «Pi» թիվը չի փոխվի ծրագրի կատարման ընթացքում, բայց դեռ ավելի հարմար է նման արժեքը պահել որպես հաստատուն:

Միևնույն ժամանակ մենք կարող ենք օգտագործել փոփոխականը sVAT_Rate գնված ապրանքների ԱԱՀ-ի դրույքաչափը պահպանելու համար. Փոփոխական արժեք sVAT_Rate կարող է տարբեր լինել՝ կախված գնված ապրանքից:

Տվյալների տեսակները

Բոլոր փոփոխականները և հաստատունները որոշակի տվյալների տիպի են: Ստորև բերված աղյուսակը թվարկում է VBA-ում օգտագործվող տվյալների տեսակները՝ հնարավոր արժեքների նկարագրությամբ և տիրույթով.

Տվյալների տեսակը չափՆկարագրությունԱրժեքների շարքը
Բայտ1 բայթԴրական ամբողջ թվեր; հաճախ օգտագործվում է երկուական տվյալների համար- ից մինչեւ 0 255
Boolean2 բայթԿարող է լինել ճիշտ կամ կեղծՃիշտ կամ սխալ
Ամբողջական2 բայթԱմբողջ թվեր (առանց կոտորակային մասի)-32 -ից +768
Long4 բայթՄեծ ամբողջ թվեր (առանց կոտորակային մասի)от -2 147 483 648 до +2 147 483 647
ամուրի4 բայթՄեկ ճշգրիտ լողացող կետի համար-3.4e38-ից մինչև +3.4e38
կրկնակի8 բայթԿրկնակի ճշգրտությամբ լողացող կետի համարը-1.8e308-ից մինչև +1.8e308
Արտարժույթ8 բայթԼողացող կետի համարը՝ տասնորդական թվերի ֆիքսված թվովот -922 337 203 685 477.5808 до +922 337 203 685 477.5807
Ամսաթիվ8 բայթԱմսաթիվ և ժամ – Ամսաթիվ տիպի տվյալները ներկայացված են լողացող կետով: Այս թվի ամբողջական մասն արտահայտում է ամսաթիվը, իսկ կոտորակայինը՝ ժամը։հունվարի 1-ից 100-ից մինչև դեկտեմբերի 31-ը 9999 թ
Օբյեկտ4 բայթՕբյեկտի հղումՑանկացած օբյեկտի հղում
Stringփոխվում էՆիշերի հավաքածու. String տեսակը կարող է լինել ֆիքսված կամ փոփոխական երկարությամբ: Ավելի հաճախ օգտագործվում է փոփոխական երկարությամբՀաստատուն երկարություն – մինչև մոտավորապես 65 նիշ: Փոփոխական երկարություն – մինչև մոտավորապես 500 միլիարդ նիշ
տարբերակփոխվում էԿարող է պարունակել ամսաթիվ, float կամ նիշերի տող: Այս տեսակն օգտագործվում է այն դեպքերում, երբ նախապես հայտնի չէ, թե ինչ տեսակի տվյալներ են մուտքագրվելու։Թիվ – Կրկնակի, լար – Տող

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

Փոփոխականների և հաստատունների հայտարարում

Թարգմանչի նշում. Խոսելով VBA-ում փոփոխականների մասին, հարկ է նշել ևս մեկ շատ կարևոր կետ. Եթե ​​մենք հայտարարում ենք փոփոխական, բայց դրան որևէ արժեք չենք վերագրում, ապա այն սկզբնավորվում է լռելյայն արժեքով.

• տեքստային տողերը սկզբնավորվում են դատարկ տողերով;

• թվեր — արժեքը 0;

• տիպի փոփոխականներ Boolean - Կեղծ;

• ամսաթվերը – 30 դեկտեմբերի, 1899 թ.

Նախքան փոփոխական կամ հաստատուն օգտագործելը, այն պետք է հայտարարվի: Դա անելու համար մակրոյում ավելացրեք կոդի հետևյալ պարզ տողը.

Dim Имя_Переменной As Тип_Данных

Կոդի վերը նշված տողում Փոփոխական_անուն այն փոփոխականի անունն է, որը կօգտագործվի կոդում, և Տվյալների_տեսակ այս հոդվածում մի փոքր ավելի վաղ տրված աղյուսակի տվյալների տեսակներից մեկն է: Օրինակ:

Dim sVAT_Rate As Single Dim i As Integer

Հաստատունները հայտարարվում են նույն կերպ, սակայն հաստատուններ հայտարարելիս պետք է անմիջապես նշել դրանց արժեքը։ Օրինակ, այսպես.

Const iMaxCount = 5000 Const iMaxScore = 100

Անհրաժեշտ չէ Excel-ում փոփոխականներ հայտարարել: Լռելյայնորեն, Excel-ում բոլոր մուտքագրված, բայց չհայտարարված փոփոխականները կունենան այդ տեսակը տարբերակ և կկարողանա ընդունել ինչպես թվային, այնպես էլ տեքստային արժեքը:

Այսպիսով, ծրագրավորողը ցանկացած պահի կարող է օգտագործել նոր փոփոխականը (նույնիսկ եթե այն հայտարարված չէ), և Excel-ը այն կվերաբերվի որպես տիպի փոփոխական տարբերակ. Այնուամենայնիվ, կան մի քանի պատճառներ, թե ինչու դա չպետք է արվի.

  1. Հիշողության օգտագործումը և հաշվողական արագությունը: Եթե ​​դուք փոփոխական չեք հայտարարում տվյալների տեսակի նշումով, ապա լռելյայն այն կսահմանվի տիպի տարբերակ. Տվյալների այս տեսակն ավելի շատ հիշողություն է օգտագործում, քան տվյալների այլ տեսակներ: Մեկ փոփոխականի համար մի քանի լրացուցիչ բայթ կարող է շատ չհնչել, բայց գործնականում ծրագրերը կարող են ունենալ հազարավոր փոփոխականներ (հատկապես զանգվածների հետ աշխատելիս): Հետևաբար, լրացուցիչ հիշողությունն օգտագործվում է փոփոխականների կողմից, ինչպիսիք են տարբերակ, համեմատած տիպի փոփոխականների հետ Ամբողջական or ամուրի, կարող է ավելացնել մինչև զգալի գումար: Բացի այդ, տիպի փոփոխականներով գործողություններ տարբերակ կատարվում են շատ ավելի դանդաղ, քան այլ տիպի փոփոխականների դեպքում, համապատասխանաբար, հավելյալ հազար տիպի փոփոխականներ տարբերակ կարող է զգալիորեն դանդաղեցնել հաշվարկները:
  2. Փոփոխականների անուններում տառասխալների կանխարգելում: Եթե ​​բոլոր փոփոխականները հայտարարված են, ապա VBA հայտարարությունը կարող է օգտագործվել − Option Explicit- ը (այդ մասին կխոսենք ավելի ուշ), որպեսզի բացահայտենք բոլոր չհայտարարված փոփոխականները։ Սա վերացնում է սխալ գրված փոփոխականի անվան արդյունքում ծրագրում առաջացած սխալի հայտնվելը: Օրինակ, օգտագործելով փոփոխական անունով sVAT_Rate, կարող եք տառասխալ անել և, այս փոփոխականին արժեք վերագրելով, գրել՝ «VATRate = 0,175»: Ակնկալվում է, որ այսուհետ փոփոխականը sVAT_Rate պետք է պարունակի 0,175 արժեքը, բայց, իհարկե, դա չի: Եթե ​​բոլոր օգտագործված փոփոխականների պարտադիր հայտարարագրման ռեժիմը միացված է, ապա VBA կոմպիլյատորն անմիջապես ցույց կտա սխալ, քանի որ այն չի գտնի փոփոխականը: VATR հայտարարվածների թվում։
  3. Ընդգծելով այն արժեքները, որոնք չեն համընկնում փոփոխականի հայտարարված տեսակի հետ: Եթե ​​հայտարարում եք որոշակի տիպի փոփոխական և փորձում եք դրան այլ տիպի տվյալներ վերագրել, ապա կստանաք սխալ, որը, եթե չուղղվի, կարող է հանգեցնել ծրագրի խափանման: Առաջին հայացքից սա կարող է լավ պատճառ թվալ փոփոխականներ չհայտարարելու համար, բայց իրականում, քան նախկինում, պարզվում է, որ փոփոխականներից մեկը ստացել է սխալ տվյալներ, որոնք պետք է ստանար, այնքան լավ: Հակառակ դեպքում, եթե ծրագիրը շարունակի աշխատել, արդյունքները կարող են լինել սխալ և անսպասելի, և շատ ավելի դժվար կլինի գտնել սխալների պատճառը: Հնարավոր է նաև, որ մակրոն «հաջողությամբ» գործարկվի։ Արդյունքում սխալն աննկատ կմնա, և աշխատանքը կշարունակվի սխալ տվյալներով:

Այս առումով, ցանկալի է հայտնաբերել սխալ տվյալների տեսակը և հնարավորինս շուտ ուղղել կոդի նման սխալները: Այս պատճառներով խորհուրդ է տրվում հայտարարել բոլոր փոփոխականները VBA մակրո գրելիս:

Option Explicit- ը

օպերատոր Option Explicit- ը առաջացնում է բոլոր փոփոխականները, որոնք կօգտագործվեն VBA կոդում, և բոլոր չհայտարարված փոփոխականները նշում են որպես սխալներ կոմպիլյացիայի ժամանակ (մինչ կոդերի գործարկումը սկսվելը): Այս օպերատորի կիրառումը դժվար չէ. պարզապես գրեք այս տողը VBA ֆայլի ամենավերևում.

Option Explicit

Եթե ​​ցանկանում եք միշտ տեղադրել Option Explicit- ը յուրաքանչյուր ստեղծված VBA մոդուլի վերևում, դա կարող է կատարվել ավտոմատ կերպով: Դա անելու համար անհրաժեշտ է միացնել տարբերակը Պահանջել փոփոխական հռչակագիր VBA խմբագրի կարգավորումներում:

Սա արվում է այսպես.

  • Visual Basic Editor մենյուից կտտացրեք գործիքներ > Ընտրանքներ
  • Հայտնվող երկխոսության մեջ բացեք ներդիրը Խմբագիր
  • Ստուգեք տուփը Պահանջել փոփոխական հռչակագիր եւ սեղմեք OK

Երբ միացված է, տողը Option Explicit- ը ավտոմատ կերպով կտեղադրվի յուրաքանչյուր ստեղծված նոր մոդուլի սկզբում:

Փոփոխականների և հաստատունների շրջանակը

Յուրաքանչյուր հայտարարված փոփոխական կամ հաստատուն ունի իր սահմանափակ շրջանակը, այսինքն՝ ծրագրի սահմանափակ մասը, որում գոյություն ունի այս փոփոխականը։ Շրջանակը կախված է նրանից, թե որտեղ է արվել փոփոխականի կամ հաստատունի հայտարարությունը: Վերցնենք, օրինակ, փոփոխականը sVAT_Rate, որն օգտագործվում է ֆունկցիայի մեջ Ընդհանուր արժեքը. Հետևյալ աղյուսակը քննարկում է փոփոխական շրջանակի երկու տարբերակ sVAT_Rateմոդուլում հայտարարված երկու տարբեր դիրքերում.

Տարբերակ Բացահայտ Dim sVAT_Rate As Single Function Total_Cost() Որպես կրկնակի ... Վերջ ֆունկցիա
Եթե ​​փոփոխականը sVAT_Rate հայտարարված մոդուլի հենց սկզբում, ապա այս փոփոխականի շրջանակը կլինի ամբողջ մոդուլը (այսինքն՝ փոփոխականը sVAT_Rate կճանաչվի այս մոդուլի բոլոր ընթացակարգերով):

Հետեւաբար, եթե ֆունկցիայի մեջ Ընդհանուր արժեքը փոփոխական մեծություն sVAT_Rate կհատկացվի որոշակի արժեք, այնուհետև նույն մոդուլում կատարված հաջորդ ֆունկցիան կօգտագործի փոփոխականը sVAT_Rate նույն իմաստով.

Այնուամենայնիվ, եթե կանչվում է մեկ այլ մոդուլում տեղակայված որևէ ֆունկցիա, ապա դրա համար փոփոխականը sVAT_Rate հայտնի չի լինի.

Տարբերակ Բացահայտ գործառույթ Total_Cost() Որպես կրկնակի մթության sVAT_Rate As Single ... Վերջի ֆունկցիա
Եթե ​​փոփոխականը sVAT_Rate հայտարարված գործառույթի սկզբում Ընդհանուր արժեքը, ապա դրա շրջանակը կսահմանափակվի միայն այս ֆունկցիայով (այսինքն՝ ֆունկցիայի շրջանակներում Ընդհանուր արժեքը, կարող եք օգտագործել փոփոխականը sVAT_Rate, բայց ոչ դրսում):

Երբ փորձում եք օգտագործել sVAT_Rate Մեկ այլ ընթացակարգում VBA կոմպիլյատորը կհայտնի սխալի մասին, քանի որ այս փոփոխականը չի հայտարարվել ֆունկցիայից դուրս Ընդհանուր արժեքը (պայմանով, որ օպերատորն օգտագործվում է Option Explicit- ը).

Վերևում ցուցադրված օրինակում փոփոխականը հայտարարվում է մոդուլի մակարդակում՝ բանալի բառով Dim. Այնուամենայնիվ, կարող է անհրաժեշտ լինել, որ հայտարարված փոփոխականները կարող են օգտագործվել այլ մոդուլներում: Նման դեպքերում բանալի բառի փոխարեն փոփոխական հայտարարել Dim հիմնաբառը պետք է օգտագործվի Public.

Ի դեպ, մոդուլի մակարդակով փոփոխական հայտարարագրելու համար բանալի բառի փոխարեն Dim հիմնաբառը կարող է օգտագործվել Անձնական, ինչը ցույց է տալիս, որ այս փոփոխականը նախատեսված է միայն ընթացիկ մոդուլում օգտագործելու համար։

Կարող եք նաև օգտագործել հիմնաբառեր հաստատուններ հայտարարելու համար: Public и Անձնական, բայց ոչ բանալի բառի փոխարեն Կոնստ, դրա հետ մեկտեղ։

Հետևյալ օրինակները ցույց են տալիս հիմնաբառերի օգտագործումը Public и Անձնական կիրառվում է փոփոխականների և հաստատունների նկատմամբ:

Տարբերակ Բացահայտ հանրային sVAT_Rate As Single Public Const iMax_Count = 5000 ...    
Այս օրինակում բանալի բառը Public օգտագործվում է փոփոխական հայտարարելու համար sVAT_Rate և հաստատուններ iMax_Count. Այս կերպ հայտարարված տարրերի շրջանակը կլինի ողջ ընթացիկ նախագիծը:

Սա նշանակում է, որ sVAT_Rate и iMax_Count հասանելի կլինի ցանկացած նախագծի մոդուլում:

Տարբերակ Բացահայտ մասնավոր sVAT_Rate As Single Private Const iMax_Count = 5000 ...    
Այս օրինակում փոփոխական հայտարարելու համար sVAT_Rate և հաստատուններ iMax_Count օգտագործված բանալի բառ Անձնական. Այս տարրերի շրջանակը ներկայիս մոդուլն է:

Սա նշանակում է, որ sVAT_Rate и iMax_Count հասանելի կլինի ընթացիկ մոդուլի բոլոր ընթացակարգերում, բայց հասանելի չի լինի այլ մոդուլների ընթացակարգերին:

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