Променљиве и константе у ВБА

У ВБА, као иу сваком другом програмском језику, променљиве и константе се користе за чување било које вредности. Као што назив говори, променљиве се могу мењати, док константе чувају фиксне вредности.

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

Истовремено, можемо користити променљиву сВАТ_Рате да чува стопу ПДВ-а на купљена добра. Вредност променљиве сВАТ_Рате може варирати у зависности од купљеног производа.

Типови података

Све променљиве и константе су одређеног типа података. Табела испод наводи типове података који се користе у ВБА са описом и опсегом могућих вредности:

Тип података veličinaOpisРаспон вредности
БитеКСНУМКС бајтоваПозитивни цели бројеви; често се користи за бинарне податкеод КСНУМКС до КСНУМКС
БоолеанКСНУМКС бајтоваМоже бити или Тачно или НетачноТачно или нетачно
Цео бројКСНУМКС бајтоваЦели бројеви (без разломака)од -32 до +768
ДугКСНУМКС бајтоваВелики цели бројеви (без разломака)от -2 147 483 648 до +2 147 483 647
једанКСНУМКС бајтоваБрој са једним прецизним покретним зарезомод -3.4е38 до +3.4е38
ДвапутКСНУМКС бајтоваБрој са помичним зарезом двоструке прецизностиод -1.8е308 до +1.8е308
ВалутаКСНУМКС бајтоваБрој са помичним зарезом, са фиксним бројем децималних местаот -922 337 203 685 477.5808 до +922 337 203 685 477.5807
датумКСНУМКС бајтоваДатум и време – Подаци типа Датум је представљен бројем са покретним зарезом. Целобројни део овог броја изражава датум, а разломак време.од 1. јануара 100. до 31. децембра 9999. године
објекатКСНУМКС бајтоваРеференца објектаБило која референца објекта
низсе мењаСкуп знакова. Тип Стринг може бити фиксне или променљиве дужине. Чешће се користи са променљивом дужиномФиксна дужина – до приближно 65 карактера. Променљива дужина – до приближно 500 милијарди знакова
варијантасе мењаМоже да садржи датум, флоат или низ знакова. Овај тип се користи у случајевима када се унапред не зна која врста података ће бити унета.Број – Двоструки, низ – Стринг

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

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

Напомена преводиоца: Говорећи о варијаблама у ВБА, вреди поменути још једну веома важну тачку. Ако декларишемо променљиву, али јој не доделимо никакву вредност, она се иницијализује са подразумеваном вредношћу:

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

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

• променљиве типа Боолеан — Фалсе;

• датуми – 30.

Пре него што се може користити променљива или константа, она мора бити декларисана. Да бисте то урадили, додајте следећу једноставну линију кода у макро:

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

У горњем реду кода Име променљиве је име променљиве која ће се користити у коду, и Тип података је један од типова података из табеле дате мало раније у овом чланку. На пример:

Дим сВАТ_Рате Ас Сингле Дим и Ас Интегер

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

Цонст иМакЦоунт = 5000 Цонст иМакСцоре = 100

Није потребно декларисати променљиве у Екцел-у. Подразумевано, све унете, али не декларисане променљиве у Екцел-у ће имати тип варијанта и моћи ће да прихвати и нумеричку и текстуалну вредност.

Дакле, програмер може да користи нову променљиву у било ком тренутку (чак и ако није декларисана), а Екцел ће је третирати као променљиву типа варијанта. Међутим, постоји неколико разлога зашто то не би требало учинити:

  1. Коришћење меморије и брзина рачунара. Ако не декларишете променљиву са назнаком типа података, она ће подразумевано бити подешена на тип варијанта. Овај тип података користи више меморије од других типова података. Неколико додатних бајтова по променљивој можда не звучи много, али у пракси програми могу да имају хиљаде променљивих (посебно када раде са низовима). Према томе, додатна меморија коју користе варијабле попут варијанта, у поређењу са варијаблама типа Цео број or један, може додати значајан износ. Поред тога, операције са променљивим типа варијанта се извршавају много спорије него код променљивих других типова, односно додатних хиљаду променљивих типа варијанта може значајно успорити прорачуне.
  2. Спречавање грешака у куцању у називима променљивих. Ако су све променљиве декларисане, онда се ВБА изјава може користити − Опција експлицитно (о томе ћемо касније) да бисмо идентификовали све недекларисане варијабле. Ово елиминише појаву грешке у програму као резултат погрешно написаног имена променљиве. На пример, коришћењем променљиве под називом сВАТ_Рате, можете направити грешку у куцању и, додељујући вредност овој променљивој, написати: „ВАТРате = 0,175“. Очекује се да ће од сада променљива сВАТ_Рате треба да садржи вредност 0,175 – али наравно не. Ако је омогућен режим обавезне декларације свих коришћених променљивих, онда ће ВБА компајлер одмах указати на грешку, јер неће пронаћи променљиву ВАТРате међу најављеним.
  3. Истицање вредности које се не подударају са декларисаним типом променљиве. Ако декларишете променљиву одређеног типа и покушате да јој доделите податке другог типа, добићете грешку, која, ако се не исправи, може довести до пада програма. На први поглед, ово може изгледати као добар разлог да се не декларишу променљиве, али у ствари, него пре, испоставило се да је једна од варијабли примила погрешне податке које је требало да прими – тим боље! У супротном, ако програм настави да ради, резултати могу бити нетачни и неочекивани и биће много теже пронаћи узрок грешака. Такође је могуће да ће макро бити „успешно“ извршен. Као резултат тога, грешка ће остати непримећена и рад ће се наставити са нетачним подацима!

С тим у вези, пожељно је открити нетачан тип података и исправити такве грешке у коду што је раније могуће. Из ових разлога, препоручује се да декларишете све варијабле када пишете ВБА макро.

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

оператор Опција експлицитно узрокује да се декларишу све променљиве које ће се користити у ВБА коду и означава све недекларисане променљиве као грешке током компилације (пре него што почне извршавање кода). Примена овог оператора није тешка – само напишите овај ред на самом врху ВБА датотеке:

Option Explicit

Ако желите да увек убаците Опција експлицитно на врх сваког новог ВБА модула креираног, ово се може урадити аутоматски. Да бисте то урадили, потребно је да омогућите опцију Захтевај декларацију променљиве у подешавањима ВБА едитора.

Ово се ради овако:

  • У менију Висуал Басиц Едитор кликните алат > Опције
  • У дијалогу који се појави отворите картицу уредник
  • Означите поље Захтевај декларацију променљиве и притисните OK

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

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

Свака декларисана променљива или константа има свој ограничени опсег, односно ограничени део програма у коме ова променљива постоји. Опсег зависи од тога где је направљена декларација променљиве или константе. Узмимо, на пример, променљиву сВАТ_Рате, који се користи у функцији Укупни трошкови. Следећа табела разматра две опције за променљиви опсег сВАТ_Ратедекларисано на две различите позиције у модулу:

Опција Експлицитно Дим сВАТ_Рате као појединачна функција Тотал_Цост() као двострука ... Енд функција
Ако је променљива сВАТ_Рате декларисана на самом почетку модула, тада ће опсег ове променљиве бити цео модул (тј. променљива сВАТ_Рате биће признати свим процедурама у овом модулу).

Стога, ако је у функцији Укупни трошкови варијабла сВАТ_Рате ће бити додељена нека вредност, онда ће следећа функција која се извршава у оквиру истог модула користити променљиву сВАТ_Рате са истим значењем.

Међутим, ако се позове нека функција која се налази у другом модулу, онда за њу променљива сВАТ_Рате неће бити познато.

Опција Експлицитна функција Тотал_Цост() Ас Доубле Дим сВАТ_Рате Ас Сингле ... Енд Функција
Ако је променљива сВАТ_Рате декларисано на почетку функције Укупни трошкови, онда ће његов опсег бити ограничен само на ову функцију (тј. унутар функције Укупни трошкови, можете користити променљиву сВАТ_Рате, али не споља).

Када покушавате да користите сВАТ_Рате у другој процедури, ВБА компајлер ће пријавити грешку јер ова променљива није декларисана ван функције Укупни трошкови (под условом да се користи оператор Опција експлицитно).

У примеру приказаном изнад, променљива је декларисана на нивоу модула помоћу кључне речи Дим. Међутим, можда ће бити неопходно да се декларисане променљиве могу користити у другим модулима. У таквим случајевима, да се декларише променљива уместо кључне речи Дим кључна реч се мора користити Јавност.

Иначе, да би се декларисала променљива на нивоу модула, уместо кључне речи Дим може се користити кључна реч Приватан, што указује да је ова променљива намењена за употребу само у тренутном модулу.

Такође можете користити кључне речи за декларисање константи. Јавност и Приватан, али не уместо кључне речи Цонст, заједно са њим.

Следећи примери показују употребу кључних речи Јавност и Приватан примењен на променљиве и константе.

Опција Екплицит Публиц сВАТ_Рате Ас Сингле Публиц Цонст иМак_Цоунт = 5000 ...    
У овом примеру, кључна реч Јавност користи се за декларацију променљиве сВАТ_Рате и константе иМак_Цоунт. Овако декларисани опсег елемената биће цео актуелни пројекат.

То значи да сВАТ_Рате и иМак_Цоунт биће доступан у било ком модулу пројекта.

Опција Екплицит Привате сВАТ_Рате Ас Сингле Привате Цонст иМак_Цоунт = 5000 ...    
У овом примеру, за декларисање променљиве сВАТ_Рате и константе иМак_Цоунт коришћена кључна реч Приватан. Опсег ових елемената је тренутни модул.

То значи да сВАТ_Рате и иМак_Цоунт биће доступан у свим процедурама тренутног модула, али неће бити доступан за процедуре у другим модулима.

Ostavite komentar