Разумевање Екцел ВБА типова података (променљиве и константе)

У Екцел ВБА често ћете морати да користите променљиве и константе.

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

На пример, ако желите да складиштите целе бројеве у променљивој, ваш тип података би био „Интегер“, а ако желите да сачувате текст, онда би ваш тип података био „Стринг“.

Више о типовима података касније у овом водичу.

Док се вредност променљиве мења када је код у току, константа има вредност која се никада не мења. Као добра пракса кодирања, требало би да дефинишете тип података и променљивог и константног.

Зашто користити променљиве у ВБА?

Када кодирате у ВБА, потребне су вам променљиве које можете користити за држање вредности.

Предност коришћења променљиве је што можете променити вредност променљиве унутар кода и наставити да је користите у коду.

На пример, испод је код који додаје првих 10 позитивних бројева, а затим приказује резултат у оквиру за поруку:

Суб АддФирстТенНумберс () Дим Вар Ас Интегер Дим и Ас Интегер Дим к ас Интегер Фор и = 1 То 10 к = к + и Нект и МсгБок к Енд Суб

У горњем коду постоје три променљиве - Вар, и, и к.

Горњи код користи петљу Фор Нект где се све ове три променљиве мењају како се петље завршавају.

Корисност променљиве лежи у чињеници да се она може променити док је код у току.

Испод су нека правила која треба имати на уму при именовању променљивих у ВБА:

  1. Можете користити абецеде, бројеве и интерпункције, али први број мора бити абецеда.
  2. Не можете користити размак или тачку у називу променљиве. Међутим, можете користити знак доње црте да бисте имена променљивих учинили читљивијима (као што је Рате_Рате)
  3. Не можете користити посебне знакове (#, $, %, & или!) У именима променљивих
  4. ВБА не прави разлику између слова у називу променљиве. Дакле, „РатеРате“ и „Интерест рате“ су исти за ВБА. Можете користити мешовита слова да бисте учинили варијабле читљивијима.
  5. ВБА има нека резервисана имена која можете користити за име променљиве. На пример, не можете да користите реч „Даље“ као назив променљиве, јер је то резервисано име за петљу За следеће.
  6. Име ваше променљиве може имати највише 254 знака.

Тип података променљивих

Да бисте најбоље искористили променљиве, добра је пракса да наведете тип података променљиве.

Тип података који доделите променљивој зависиће од врсте података које желите да та променљива има.

Испод је табела која приказује све доступне типове података које можете користити у програму Екцел ВБА:

Тип података Коришћени бајтови Опсег вредности
Бајт 1 бајт 0 до 255
Боолеан 2 бајта Тачно или Нетачно
Интегер 2 бајта -32,768 до 32,767
Лонг (дугачак цео број) 4 бајта -2,147,483,648 до 2,147,483,647
Једно 4 бајта -3.402823Е38 до -1.401298Е -45 за негативне вредности; 1.401298Е-45 до 3.402823Е38 за позитивне вредности
Доубле 8 бајтова -1.79769313486231Е308 до-4.94065645841247Е-324 за негативне вредности; 4.94065645841247Е-324 до 1.79769313486232Е308 за позитивне вредности
Валута 8 бајтова -922,337,203,685,477.5808 до 922,337,203,685,477.5807
Децималан 14 бајтова +/- 79,228,162,514,264,337,593,543,950,335 без децималног зареза; +/- 7,9228162514264337593543950335 са 28 места десно од децималног места
Датум 8 бајтова 1. јануара 100. до 31. децембра 9999. године
Објецт 4 бајта Било која референца објекта
Низ (променљиве дужине) 10 бајтова + дужина низа 0 до приближно 2 милијарде
Низ (фиксне дужине) Дужина жице 1 до приближно 65.400
Варијанта (са бројевима) 16 бајтова Било која нумеричка вредност до опсега Доубле
Варијанта (са знаковима) 22 бајта + дужина низа Исти опсег као за низ променљиве дужине
Кориснички дефинисано Варира Опсег сваког елемента је исти као и опсег његовог типа података.

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

На пример, ако требате да користите променљиву која треба да садржи број месеца, можете да користите тип података БИТЕ (који може да прими вредности од 0 до 255). Будући да број месеца неће бити већи од 12, ово ће добро функционисати и такође ће резервисати мање меморије за ову променљиву.

Напротив, ако вам је потребна променљива за складиштење бројева редова у Екцелу, морате да користите тип података који може да прими број до 1048756. Зато је најбоље да користите тип података Лонг.

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

Као добра пракса кодирања, требало би да декларишете тип података променљивих (или константи) приликом писања кода. Ово чини да ВБА алоцира само наведену меморију променљивој и то може убрзати рад вашег кода.

Испод је пример где сам различите типове података прогласио различитим променљивим:

Суб ДецларингВариаблес () Дим Кс као цео број Дим Емаил Као низ Дим Дим ФирстНаме Као низ Дим Дим РовЦоунт Као дугачак Дим ТодаиДате као датум Крај Суб

Да бисте декларисали променљиви тип података, морате да користите ДИМ израз (који је скраћеница од Дименсион).

У ‘Дим Кс као Интегер‘, Променио сам Кс као интегер тип података.

Сада када га користим у свом коду, ВБА би знао да Кс може да садржи само целобројни тип података.

Ако покушам да му доделим вредност која није цео број, добићу грешку (као што је приказано испод):

Напомена: Такође можете изабрати да не декларишете тип података, у том случају ВБА аутоматски узима у обзир променљиву варијантног типа података. Варијантни тип података може да прими било који тип података. Иако ово може изгледати згодно, није најбоља пракса користити варијантни тип података. Обично заузима више меморије и може успорити рад вашег ВБА кода.

Оглашавање променљиве декларације обавезном (опција експлицитна)

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

Осим што штеди меморију и чини ваш код ефикаснијим, декларисање променљивих има још једну велику предност - помаже у хватању грешака узрокованих погрешно написаним именима променљивих.

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

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

Када додате „Оптион Екплицит“, мораћете да декларишете све променљиве пре покретања кода. Ако постоји било која променљива која није декларисана, ВБА би приказао грешку.

Постоји велика корист од коришћења опције Екплицит.

Понекад ћете можда погрешити при куцању и унети назив променљиве која није тачна.

Нормално, не постоји начин да ВБА сазна да ли је грешка или је намерна. Међутим, када користите „Оптион Екплицит“, ВБА ће видети погрешно написано име променљиве као нову променљиву која није декларисана и показаће вам грешку. Ово ће вам помоћи да идентификујете ове погрешно написане називе променљивих, које је прилично тешко уочити у дугачком коду.

Испод је пример где се коришћењем „Оптион Екплицит“ идентификује грешка (која не би могла бити заробљена да нисам користио „Оптион Екплицит“)

Суб ЦоммиссионЦалц () Дим ЦоммиссионРате Ас Доубле Иф Ранге ("А1"). Валуе> 10000 тхен ЦоммиссионРате = 0.1 Елсе ЦоммиссионРтае = 0.05 Енд Иф МсгБок "Тотал Цоммиссион:" & Ранге ("А1"). Валуе * ЦоммиссионРате Енд Суб

Имајте на уму да сам једном погрешно написао реч „ЦоммиссионРате“ у овом коду.

Ако не користим опцију Екплицит, овај код би се покренуо и дао би ми погрешну укупну провизију (у случају да је вредност у ћелији А1 мања од 10000).

Али ако користим Оптион Екплицит на врху модула, неће ми дозволити да покренем овај код пре него што исправим погрешно написану реч или је декларишем као другу променљиву. Показаће грешку као што је приказано испод:

Иако можете да уметнете ред „Опција експлицитно“ сваки пут када кодирате, ево корака како би се она подразумевано појавила:

  1. На траци са алаткама ВБ Едитор кликните на Тоолс.
  2. Кликните на Опције.
  3. У дијалогу Опције кликните на картицу Уређивач.
  4. Означите опцију - „Захтевај декларацију променљиве“.
  5. Притисните ОК.

Када омогућите ову опцију, сваки пут када отворите нови модул, ВБА би му аутоматски додала линију „Оптион Екплицит“.

Напомена: Ова опција ће утицати само на све модуле које креирате након што је ова опција омогућена. То не утиче на све постојеће модуле.

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

До сада смо видели како декларисати променљиву и доделити јој типове података.

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

Опсег променљиве одређује где се променљива може користити у ВБА,

Постоје три начина за обухватање променљиве у програму Екцел ВБА:

  1. Унутар једне потпрограма (локалне променљиве)
  2. Унутар модула (променљиве на нивоу модула)
  3. У свим модулима (јавне променљиве)

Погледајмо сваки од ових детаља детаљно.

Унутар једне потпрограма (локалне променљиве)

Када декларишете променљиву унутар потпрограма/процедуре, тада је та променљива доступна само за ту потпрограм.

Не можете га користити у другим потпрограмима у модулу.

Чим се потпрограм заврши, променљива се брише и меморија коју користи ослобађа.

У доњем примеру, променљиве се декларишу унутар потпрограма и биће избрисане када се ова потпрограм заврши.

Унутар модула (променљиве на нивоу модула)

Када желите да променљива буде доступна за све процедуре у модулу, морате је декларисати на врху модула (а не у било којој потпрограму).

Када је декларишете на врху модула, можете користити ту променљиву у свим процедурама у том модулу.

У горњем примеру, променљива „и“ је декларисана на врху модула и доступна је за употребу свим модулима.

Имајте на уму да када се потпрограм заврши, променљиве на нивоу модула се не бришу (задржава своју вредност).

Испод је пример, где имам два кода. Када покренем прву процедуру, а затим покренем другу, вредност „и“ постаје 30 (пошто носи вредност 10 из прве процедуре)

У свим модулима (јавне променљиве)

Ако желите да променљива буде доступна у свим процедурама у радној свесци, морате је декларисати помоћу кључне речи Публиц (уместо ДИМ -а).

Доња линија кода на врху модула учинила би променљиву „ЦоммиссионРате“ доступном у свим модулима у радној свесци.

 Јавна комисијаОцените као двоструку

Декларацију променљиве (помоћу кључне речи Публиц) можете уметнути у било који од модула (на врху пре било које процедуре).

Статичке променљиве (које задржавају вредност)

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

У случају да желите да променљива задржи вредност, морате да користите Статички кључна реч.

Дозволите ми да вам прво покажем шта се дешава у нормалном случају.

У доњем коду, када покренем процедуру више пута, сваки пут ће приказати вредност 10.

Потпоступак1 () Дим и Ас Интегер и = и + 10 МсгБок и Енд Суб

Сада, ако користим кључну реч Статиц уместо ДИМ -а, и покренем процедуру више пута, она ће наставити да приказује вредности у корацима од 10. То се дешава пошто променљива „и“ задржава своју вредност и користи је у израчунавању.

Потпоступак1 () Статички и Као цео број и = и + 10 МсгБок и Крај под

Декларисање константи у Екцел ВБА

Док се променљиве могу мењати током извршавања кода, ако желите да имате фиксне вредности, можете користити константе.

Константа вам омогућава да додијелите вриједност именованом низу који можете користити у свом коду.

Предност коришћења константе је у томе што олакшава писање и разумевање кода, а такође вам омогућава да контролишете све фиксне вредности са једног места.

На пример, ако рачунате провизије и стопа провизије је 10%, можете креирати константу (ЦоммиссионРате) и доделити јој вредност 0,1.

У будућности, ако се промени стопа провизије, само морате да извршите промену на једном месту уместо да је ручно мењате у коду свуда.

Испод је пример кода где сам константи доделио вредност:

Суб ЦалцулатеЦоммиссион () Дим ЦоммиссионВалуе Ас Доубле Цонст ЦоммиссионРате Ас Доубле = 0.1 ЦоммиссионВалуе = Ранге ("А1") * ЦоммиссионРате МсгБок ЦоммиссионВалуе Енд Суб

Следећи ред се користи за декларисање константе:

Цонст ЦоммиссионРате Ас Доубле = 0.1

Приликом објављивања константи морате почети са кључном речи „Цонст‘, Након чега следи назив константе.

Имајте на уму да сам у овом примеру навео тип података константе као Доубле. Опет, добра је пракса да наведете тип података како би ваш код радио брже и био ефикаснији.

Ако не декларишете тип података, сматраће се да је то варијантни тип података.

Баш као и променљиве, константе такође могу имати опсег на основу тога где и како се декларишу:

  1. Унутар једне подрутине (локалне константе): Они су доступни у потпрограму/процедури у којој су декларисани. Како се поступак завршава, ове константе се бришу из меморије система.
  2. Унутар модула (константе на нивоу модула): Они су декларисани на врху модула (пре било које процедуре). Они су доступни за све процедуре у модулу.
  3. У свим модулима (јавне константе): Они се декларишу помоћу кључне речи „Јавно“, на врху било ког модула (пре било које процедуре). Они су доступни свим процедурама у свим модулима.

Можда ће вам се допасти и следећи ВБА водичи:

  • Како снимити макро у програму Екцел
  • Рад са ћелијама и опсезима у Екцел ВБА
  • Рад са радним листовима користећи Екцел ВБА
  • Рад са радним свескама у Екцел ВБА
  • ВБА Догађаји
  • Екцел ВБА петље
  • Како покренути макро у програму Екцел
  • Ако онда Друга изјава у Екцел ВБА.

Ви ће помоћи развој сајта, дељење страницу са пријатељима

wave wave wave wave wave