Променливи и константи во VBA

Во VBA, како и во секој друг програмски јазик, променливите и константите се користат за складирање на какви било вредности. Како што имплицира името, променливите може да се менуваат, додека константите складираат фиксни вредности.

На пример, константа Pi ја складира вредноста 3,14159265… Бројот „Pi“ нема да се промени за време на извршувањето на програмата, но сепак е попогодно да се складира таква вредност како константа.

Во исто време, можеме да ја користиме променливата sVAT_Rate за складирање на стапката на ДДВ на купената стока. Променлива вредност sVAT_Rate може да варира во зависност од купениот производ.

Видови податоци

Сите променливи и константи се од одреден тип на податоци. Табелата подолу ги наведува типовите на податоци што се користат во VBA со опис и опсег на можни вредности:

Тип на податоци големинаОписОпсег на вредности
Бајт1 бајтиПозитивни цели броеви; често се користи за бинарни податоциод 0 да 255
Булова2 бајтиМоже да биде или точно или неточноТочно или неточно
Цел број2 бајтиЦели броеви (без дробен дел)од -32 до +768
Долго4 бајтиГолеми цели броеви (без дробен дел)от -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 може да биде со фиксна или променлива должина. Почесто се користи со променлива должинаФиксна должина – до приближно 65 знаци. Променлива должина - до приближно 500 милијарди знаци
варијантасе менуваМоже да содржи датум, плови или низа знаци. Овој тип се користи во случаи кога однапред не се знае каков тип на податоци ќе се внесат.Број – Двојно, низа – Низа

Очигледно, користејќи ја табелата погоре и избирајќи го вистинскиот тип на податоци, можете поекономично да ја користите меморијата (на пример, изберете го типот на податоци Цел број наместо Долго or една наместо Двоен). Меѓутоа, кога користите покомпактни типови на податоци, треба да внимавате вашиот код да не се обидува да вклопи несразмерно големи вредности во нив.

Декларирање на променливи и константи

Забелешка на преведувачот: Зборувајќи за променливите во VBA, вреди да се спомене уште една многу важна точка. Ако декларираме променлива, но не и доделиме никаква вредност, тогаш таа се иницијализира со стандардна вредност:

• текстуалните низи се иницијализираат со празни низи;

• броеви — вредност 0;

• тип променливи Булова - Неточно;

• датуми – 30 декември 1899 година.

Пред да може да се користи променлива или константа, таа мора да се декларира. За да го направите ова, додадете ја следната едноставна линија на код во макрото:

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

Во горната линија на код Име на променлива е името на променливата што ќе се користи во кодот, и Тип_податоци е еден од типовите на податоци од табелата дадена малку порано во оваа статија. На пример:

Затемнето sVAT_Rate As Single Dim i As Integer

Константите се декларираат слично, но при декларирање на константи, нивната вредност мора веднаш да се наведе. На пример, вака:

Const iMaxCount = 5000 Const iMaxScore = 100

Не е неопходно да се декларираат променливи во Excel. Стандардно, сите внесени, но не декларирани променливи во Excel ќе го имаат типот варијанта и ќе може да прифати и нумеричка и текстуална вредност.

Така, програмерот може да ја користи новата променлива во секое време (дури и ако не е декларирана), а Excel ќе ја третира како променлива од типот варијанта. Сепак, постојат неколку причини зошто ова не треба да се направи:

  1. Користење на меморија и брзина на пресметување. Ако не декларирате променлива со ознака за типот на податоци, тогаш стандардно ќе биде поставена на типот варијанта. Овој тип на податоци користи повеќе меморија од другите типови податоци. Неколку дополнителни бајти по променлива можеби не звучат како многу, но во пракса, програмите може да имаат илјадници променливи (особено кога работат со низи). Затоа, дополнителната меморија што ја користат променливите како варијанта, во споредба со променливите од типот Цел број or една, може да додаде до значителна сума. Покрај тоа, операции со променливи од типот варијанта се извршуваат многу побавно отколку со променливи од други типови, соодветно, дополнителни илјада променливи од типот варијанта може значително да ги забави пресметките.
  2. Спречување на печатни грешки во имињата на променливите. Ако се декларираат сите променливи, тогаш може да се користи изјавата VBA − Опција експлицитна (за тоа ќе зборуваме подоцна) со цел да ги идентификуваме сите непријавени променливи. Ова ја елиминира појавата на грешка во програмата како резултат на неправилно напишано име на променлива. На пример, со користење на променлива именувана sVAT_Rate, можете да направите печатна грешка и, доделувајќи вредност на оваа променлива, да напишете: „VATRate = 0,175“. Се очекува дека од сега па натаму, променливата sVAT_Rate треба да ја содржи вредноста 0,175 – но секако дека не. Ако е овозможен режимот на задолжително декларирање на сите користени променливи, тогаш VBA компајлерот веднаш ќе покаже грешка, бидејќи нема да ја пронајде променливата VATRate меѓу најавените.
  3. Истакнување на вредности кои не се совпаѓаат со декларираниот тип на променлива. Ако декларирате променлива од одреден тип и се обидете да ѝ доделите податоци од различен тип, ќе добиете грешка, која доколку не се коригира може да предизвика паѓање на програмата. На прв поглед, ова може да изгледа како добра причина да не се декларираат променливи, но всушност, отколку порано се испостави дека една од променливите добила погрешни податоци што требаше да ги прими - толку подобро! Во спротивно, ако програмата продолжи да работи, резултатите може да бидат неточни и неочекувани и ќе биде многу потешко да се најде причината за грешките. Исто така, можно е макрото да биде „успешно“ извршено. Како резултат на тоа, грешката ќе остане незабележана и работата ќе продолжи со неточни податоци!

Во овој поглед, пожелно е да се открие неточен тип на податоци и да се поправат таквите грешки во кодот што е можно порано. Поради овие причини, се препорачува да ги декларирате сите променливи кога пишувате VBA макро.

Опција експлицитна

Оператор Опција експлицитна предизвикува сите променливи што ќе се користат во VBA кодот да бидат декларирани и ги означува сите непријавени променливи како грешки за време на компилацијата (пред да започне извршувањето на кодот). Примената на овој оператор не е тешко - само напишете ја оваа линија на самиот врв на датотеката VBA:

Option Explicit

Ако сакате секогаш да вметнете Опција експлицитна до врвот на секој нов креиран VBA модул, ова може да се направи автоматски. За да го направите ова, треба да ја овозможите опцијата Потребна декларација за променлива во поставките на уредникот VBA.

Ова е направено вака:

  • Од менито Visual Basic Editor, кликнете алатки > Опции
  • Во дијалогот што се појавува, отворете го јазичето Уредник
  • Проверете го полето Потребна декларација за променлива и притиснете OK

Кога е овозможено, низата Опција експлицитна автоматски ќе се вметне на почетокот на секој нов креиран модул.

Опсег на променливи и константи

Секоја декларирана променлива или константа има свој ограничен опсег, односно ограничен дел од програмата во која постои оваа променлива. Опсегот зависи од тоа каде е направена декларацијата на променливата или константата. Земете ја, на пример, променливата sVAT_Rate, што се користи во функцијата Вкупните трошоци. Следната табела дискутира за две опции за опфат на променлива sVAT_Rateдекларирано во две различни позиции во модулот:

Опција Експлицитна затемнување sVAT_Rate како единечна функција 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 ќе пријави грешка бидејќи оваа променлива не е декларирана надвор од функцијата Вкупните трошоци (под услов да се користи операторот Опција експлицитна).

Во примерот прикажан погоре, променливата се декларира на ниво на модул со клучниот збор Dim. Сепак, може да биде неопходно декларираните променливи да можат да се користат во други модули. Во такви случаи, да се декларира променлива наместо клучен збор Dim мора да се користи клучен збор Јавниот.

Патем, за да се декларира променлива на ниво на модул, наместо клучниот збор Dim може да се користи клучен збор Приватен, што покажува дека оваа променлива е наменета за употреба само во тековниот модул.

Можете исто така да користите клучни зборови за да декларирате константи. Јавниот и Приватен, но не наместо клучниот збор Конст, заедно со него.

Следниве примери покажуваат употреба на клучни зборови Јавниот и Приватен се применува на променливи и константи.

Опција Експлицитна јавна sVAT_Rate As Single Public Const iMax_Count = 5000 ...    
Во овој пример, клучниот збор Јавниот се користи за декларирање на променлива 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 ќе бидат достапни во сите процедури на тековниот модул, но нема да бидат достапни за процедурите во другите модули.

Оставете Одговор