Разбиране на променливи и константи в макроси на Excel

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

Подобно на други езици за програмиране, данните могат да се съхраняват в променливи или константи (и двете често се наричат ​​контейнери за данни). Това е основната разлика между тези понятия. Първото може да се промени в зависимост от това какво се случва в програмата. От своя страна константите се задават веднъж и не променят стойността си.

Константите могат да бъдат полезни, ако трябва да използвате една и съща голяма стойност няколко пъти. Вместо да копирате числото, можете просто да напишете името на константата. Например, можете да използвате константата „Pi“, за да съхранявате Pi, което е постоянна стойност. Той е много голям и всеки път е доста трудно да го напишете или да го търсите и копирате. И така, достатъчно е да напишете два знака и средата автоматично използва желаното число.

Потребителят на Excel трябва да декларира променливи, ако трябва да променя стойността, съхранена в тях от време на време. Например, можете да зададете променлива, наречена sVAT_Rate, която ще съхранява текущата ставка на ДДС за продукта. Ако се промени, можете бързо да го коригирате. Това е особено полезно за онези, които правят бизнес в Съединените щати, където някои стоки може изобщо да не подлежат на облагане с ДДС (и този данък също е различен в различните щати).

Типове данни

Всеки контейнер за данни може да бъде един от няколко типа. Ето таблица, описваща стандартните видове обработвана информация. Има много от тях и първоначално може да изглежда на начинаещ, че се повтарят. Но това е илюзорно чувство. Прочетете, за да научите защо определянето на правилния тип данни е толкова важно.

Не се препоръчва използването на тип данни, който заема повече място в паметта за малки числа. Например за числото 1 е достатъчно да използвате типа Byte. Това ще има положителен ефект върху производителността на изпълнимия модул, особено на слаби компютри. Но тук е важно да не отивате твърде далеч. Ако използвате тип данни, който е твърде компактен, голяма стойност може да не се побере в него.

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

Силно не се препоръчва използването на контейнер с данни без предварителното му деклариране. Тогава могат да възникнат редица проблеми, за избягването на които е необходимо да се напишат няколко малки реда код с изброяване на променливи или константи.

За деклариране на променлива се използва изразът Dim. Например така:

Dim Variable_Name като цяло число

Variable_Name е името на променливата. След това се записва операторът As, указващ типа на данните. Вместо низовете “Variable_Name” и “Integer”, можете да вмъкнете свое собствено име и тип данни.

Константите също могат да бъдат декларирани, но първо трябва да посочите тяхната стойност. Един от вариантите е:

Const iMaxCount = 5000

Честно казано, в някои случаи можете да направите без деклариране на променлива, но в този случай автоматично ще им бъде присвоен тип Variant. Това обаче не се препоръчва поради следните причини:

  1. Вариантът се обработва много по-бавно и ако има много такива променливи, обработката на информация може значително да се забави на слаби компютри. Изглежда, че тези секунди ще решат? Но ако трябва да напишете голям брой редове код и след това да го стартирате на слаби компютри (които все още се продават, като се има предвид, че модерните офис пакети изискват много RAM), можете напълно да спрете работата. Има случаи, когато лошо замисленото писане на макроси доведе до замразяване на смартбуци, които имат малко количество RAM и не са предназначени да изпълняват сложни задачи. 
  2. Разрешени са печатни грешки в имената, които могат да бъдат предотвратени с помощта на оператора Option Explicit, който ви позволява да намерите недекларирана променлива, ако бъде намерена такава. Това е лесен начин за откриване на грешки, тъй като и най-малката печатна грешка кара интерпретатора да не може да идентифицира променливата. И ако включите режима за деклариране на променливи, интерпретаторът просто няма да ви позволи да изпълните макроса, ако бъдат открити контейнери с данни, които не са декларирани в самото начало на модула.
  3. Избягвайте грешки, причинени от стойности на променливи, които не съответстват на типа данни. Обикновено присвояването на текстова стойност на целочислена променлива ще доведе до грешка. Да, от една страна, генеричен тип се присвоява без декларация, но ако се декларират предварително, тогава могат да се избегнат случайни грешки.

Затова, въпреки всичко, силно се препоръчва да декларирате всички променливи в макросите на Excel.

Има още нещо, което трябва да имате предвид, когато декларирате променливи. Възможно е да не се присвояват никакви стойности на променлива, когато се декларира, но в този случай тя придобива стойност по подразбиране. Например:

  1. Редовете са празни.
  2. Числата приемат стойност 0.
  3. Променливите от тип Boolean първоначално се считат за false.
  4. Датата по подразбиране е 30 декември 1899 г.

Например, не е необходимо да присвоявате стойност 0 на целочислена променлива, ако преди това не е зададена стойност. Тя вече съдържа този номер.

Изрично изявление за опция

Този оператор ви позволява да декларирате всички променливи, които се използват във VBA кода и да определите наличието на всички недекларирани контейнери, преди кодът да бъде изпълнен. За да използвате тази функция, просто напишете ред от Option Explicit код в най-горната част на макро кода.

Ако трябва да включвате този израз във вашия код всеки път, можете да го направите, като използвате специална настройка в редактора на VBA. За да активирате тази опция, трябва:

  1. Отидете до средата за разработка по пътя – Инструменти > Опции.
  2. В прозореца, който се отваря след това, отворете раздела Редактор.
  3. И накрая, поставете отметка в квадратчето до елемента Изискване на декларация за променлива.

След като изпълните тези стъпки, щракнете върху бутона „OK“. 

Това е всичко, сега при писане на всеки нов макрос, този ред ще се вмъква автоматично в горната част на кода.

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

Всяка променлива или константа има само ограничен обхват. Зависи къде го декларираш.

Да предположим, че имаме функция Крайна цена()и използва променливата sVAT_ставка. В зависимост от позицията в модула, той ще има различен обхват:

Опция Изрично

Dim sVAT_Rate като единична

Функция Total_Cost() Като Double

.

.

.

краен Function

Ако променлива е декларирана в горната част на самия модул, тя се разпространява в целия модул. Тоест може да се чете от всяка процедура.

Освен това, ако една от процедурите промени стойността на променливата, тогава следващата ще прочете и тази коригирана стойност. Но в други модули тази променлива все още няма да бъде прочетена.

Опция Изрично

Функция Total_Cost() Като Double

Dim sVAT_Rate като единична

   .

   .

   .

краен Function

В този случай променливата е декларирана вътре в процедурата и интерпретаторът ще изведе грешка, ако се използва в друга процедура.

Ако искате променливата да се чете от други модули, трябва да използвате ключовата дума Public вместо ключовата дума Dim. По същия начин можете да ограничите обхвата на променлива само до текущия модул, като използвате публичния израз, който се изписва вместо думата Dim.

Можете да зададете обхвата на константите по подобен начин, но ключовата дума тук е написана заедно с оператора Const.

Ето таблица с добър пример за това как работи с константи и променливи.

Опция Изрично

Обществена sVAT_ставка като единична

Public Const iMax_Count = 5000

В този пример можете да видите как ключовата дума Public се използва за деклариране на променлива и какво трябва да напишете в редактора на Visual Basic, за да декларирате публична константа. Обхватът на тези контейнери за стойност се прилага за всички модули.
Опция Изрично

Частна sVAT_ставка като единична

Private Const iMax_Count = 5000

Тук променливите и константите се декларират с помощта на ключовата дума Private. Това означава, че те могат да се видят само в рамките на текущия модул и процедурите в други модули не могат да ги използват.

Защо са необходими константи и променливи

Използването на константи и променливи ви позволява да увеличите степента на разбираемост на кода. И ако начинаещите като цяло нямат въпроси защо са необходими променливи, тогава има много неясноти относно необходимостта от константи. И този въпрос изглежда на пръв поглед съвсем логичен. В крайна сметка можете да декларирате променлива веднъж и никога повече да не я променяте.

Отговорът се оказва някъде в същата равнина, както по отношение на използването на типове данни, които заемат голямо пространство в паметта. Ако имаме работа с огромен брой променливи, можем случайно да променим съществуващ контейнер. Ако потребителят предпише, че определена стойност никога няма да се промени, тогава средата автоматично ще контролира това.

Това е особено важно, когато макросът е написан от няколко програмисти. Човек може да знае, че дадена променлива не трябва да се променя. А другото не е. Ако посочите оператора Const, друг разработчик ще знае, че тази стойност не се променя.

Или, ако има константа с едно име, а променливата има различно, но подобно име. Разработчикът може просто да ги обърка. Например една променлива, която не трябва да се променя, се нарича Variable11, а друга, която може да се редактира, се нарича Variable1. Човек може автоматично, когато пише код, случайно да пропусне допълнителна единица и да не я забележи. В резултат на това контейнерът за стойности ще бъде променен, което не трябва да се докосва.

Или самият разработчик може да забрави кои променливи може да докосне и кои не. Това често се случва, когато кодът се пише няколко седмици и размерът му стане голям. През това време е много лесно да забравите дори какво означава тази или онази променлива.

Да, можете да направите с коментари в тази ситуация, но не е ли по-лесно да посочите думата Const?

Заключения

Променливите са основен компонент на макропрограмирането, което ви позволява да извършвате сложни операции, от изчисления до информиране на потребителя за определени събития или определяне на конкретни стойности в клетките на електронна таблица.

Трябва да се използват константи, ако разработчикът знае със сигурност, че съдържанието на тези контейнери няма да се промени в бъдеще. Препоръчително е да не използвате променливи вместо това, тъй като е възможно случайно да направите грешка.

Оставете коментар