Pochopení proměnných a konstant v makrech aplikace Excel

V tomto článku se dozvíte, jaké konstanty a proměnné jsou v makrech, kde je lze použít a jaký je hlavní rozdíl mezi různými datovými typy. Bude také odhaleno, proč jsou potřebné konstanty, pokud můžete proměnnou pouze napsat a nikdy ji neměnit.

Stejně jako ostatní programovací jazyky mohou být data uložena v proměnných nebo konstantách (obě jsou také často označovány jako datové kontejnery). To je hlavní rozdíl mezi těmito pojmy. První se může změnit v závislosti na tom, co se děje v programu. Konstanty jsou zase nastaveny jednou a nemění jejich hodnotu.

Konstanty mohou být užitečné, pokud potřebujete stejnou velkou hodnotu použít vícekrát. Místo kopírování čísla můžete jednoduše napsat název konstanty. Můžete například použít konstantu „Pi“ k uložení Pi, což je konstantní hodnota. Je velmi velký a pokaždé je docela obtížné ho napsat nebo vyhledat a zkopírovat. A tak stačí napsat dva znaky a prostředí automaticky použije požadované číslo.

Uživatel Excelu potřebuje deklarovat proměnné, pokud potřebuje čas od času změnit hodnotu v nich uloženou. Můžete například nastavit proměnnou s názvem sVAT_Rate, která bude ukládat aktuální sazbu DPH pro produkt. Pokud se změní, můžete to rychle opravit. To se hodí zejména pro ty, kteří podnikají ve Spojených státech, kde některé zboží vůbec nemusí podléhat DPH (a tato daň se také liší stát od státu).

Typy dat

Každý datový kontejner může být jednoho z několika typů. Zde je tabulka popisující standardní typy zpracovávaných informací. Je jich mnoho a začátečníkovi se může zpočátku zdát, že se navzájem opakují. Ale to je iluzorní pocit. Čtěte dále a zjistěte, proč je určení správného datového typu tak důležité.

Pro malá čísla se nedoporučuje používat datový typ, který zabírá více místa v paměti. Například pro číslo 1 stačí použít typ Byte. To bude mít pozitivní vliv na výkon spustitelného modulu, zejména na slabých počítačích. Zde je ale důležité nezajít příliš daleko. Pokud použijete datový typ, který je příliš kompaktní, nemusí se do něj vejít příliš velká hodnota.

Deklarování konstant a proměnných

Důrazně se nedoporučuje používat datový kontejner bez předchozího deklarování. Pak může nastat řada problémů, k jejichž zamezení je nutné napsat pár malých řádků kódu s výčtem proměnných či konstant.

K deklaraci proměnné se používá příkaz Dim. Například takto:

Dim Variable_Name As Integer

Název_proměnné je název proměnné. Dále je zapsán operátor As označující datový typ. Namísto řetězců „Variable_Name“ a „Integer“ můžete vložit vlastní název a datový typ.

Konstanty lze také deklarovat, ale nejprve musíte určit jejich hodnotu. Jedna z možností je:

Const iMaxCount = 5000

Abychom byli spravedliví, v některých případech se obejdete bez deklarace proměnné, ale v tomto případě jim bude automaticky přiřazen typ Variant. To se však nedoporučuje z následujících důvodů:

  1. Varianta je zpracovávána mnohem pomaleji a pokud je takových proměnných mnoho, může být zpracování informací na slabých počítačích výrazně zpomaleno. Zdá se, že tyto vteřiny rozhodnou? Pokud ale musíte napsat velké množství řádků kódu a poté jej také spustit na slabých počítačích (které se stále prodávají, vzhledem k tomu, že moderní kancelářské balíky vyžadují hodně paměti RAM), můžete práci úplně zastavit. Existují případy, kdy nedomyšlené psaní maker vedlo k zamrznutí chytrých knih, které mají malé množství paměti RAM a nejsou určeny k provádění složitých úkolů. 
  2. Jsou povoleny tiskové chyby v názvech, kterým lze předejít použitím příkazu Option Explicit, který vám umožní najít nedeklarovanou proměnnou, pokud je nalezena. Je to snadný způsob, jak odhalit chyby, protože sebemenší překlep způsobí, že interpret nebude schopen identifikovat proměnnou. A pokud zapnete režim deklarace proměnných, interpret vám jednoduše nedovolí spustit makro, pokud se najdou datové kontejnery, které nebyly deklarovány na samém začátku modulu.
  3. Vyhněte se chybám způsobeným hodnotami proměnných, které neodpovídají datovému typu. Přiřazení textové hodnoty celočíselné proměnné normálně vyvolá chybu. Ano, na jedné straně je generický typ přiřazen bez deklarace, ale pokud jsou deklarovány předem, lze se vyhnout náhodným chybám.

Proto se navzdory všemu velmi doporučuje deklarovat všechny proměnné v makrech Excelu.

Při deklaraci proměnných je třeba mít na paměti ještě jednu věc. Při deklaraci proměnné je možné nepřiřadit žádné hodnoty, ale v tomto případě nabývá výchozí hodnoty. Například:

  1. Řádky jsou prázdné.
  2. Čísla nabývají hodnoty 0.
  3. Proměnné typu Boolean jsou zpočátku považovány za nepravdivé.
  4. Výchozí datum je 30. prosince 1899.

Například nemusíte přiřazovat hodnotu 0 celočíselné proměnné, pokud nebyla dříve zadána žádná hodnota. Toto číslo již obsahuje.

Možnost Explicitní prohlášení

Tento příkaz umožňuje deklarovat všechny proměnné, které se používají v kódu VBA, a určit přítomnost všech nedeklarovaných kontejnerů před spuštěním kódu. Chcete-li tuto funkci použít, jednoduše napište řádek kódu Option Explicit úplně nahoře v kódu makra.

Pokud potřebujete tento příkaz zahrnout do kódu pokaždé, můžete tak učinit pomocí speciálního nastavení v editoru VBA. Chcete-li povolit tuto možnost, musíte:

  1. Po cestě přejděte do vývojového prostředí – Nástroje > Možnosti.
  2. V okně, které se poté otevře, otevřete kartu Editor.
  3. A nakonec zaškrtněte políčko vedle položky Require Variable Declaration.

Po dokončení těchto kroků klikněte na tlačítko „OK“. 

To je vše, nyní při psaní každého nového makra bude tento řádek automaticky vložen na začátek kódu.

Rozsah konstant a proměnných

Každá proměnná nebo konstanta má pouze omezený rozsah. Záleží, kde to deklarujete.

Předpokládejme, že máme funkci Celkové náklady()a používá proměnnou sVAT_Rate. V závislosti na pozici v modulu bude mít různý rozsah:

Možnost explicitní

Dim sVAT_Rate As Single

Funkce Total_Cost() As Double

.

.

.

End Function

Pokud je proměnná deklarována v horní části samotného modulu, šíří se v tomto modulu. To znamená, že se dá číst každým postupem.

Navíc, pokud jedna z procedur změnila hodnotu proměnné, pak další načte také tuto opravenou hodnotu. Ale v jiných modulech tato proměnná stále nebude načtena.

Možnost explicitní

Funkce Total_Cost() As Double

Dim sVAT_Rate As Single

   .

   .

   .

End Function

V tomto případě je proměnná deklarována uvnitř procedury a interpret vyvolá chybu, pokud je použita v jiné proceduře.

Pokud chcete, aby proměnná byla čtena jinými moduly, musíte místo klíčového slova Dim použít klíčové slovo Public. Podobně můžete omezit rozsah proměnné pouze na aktuální modul pomocí příkazu Public, který se zapisuje místo slova Dim.

Obdobným způsobem lze nastavit rozsah konstant, klíčové slovo se zde ale zapisuje společně s operátorem Const.

Zde je tabulka s dobrým příkladem, jak to funguje s konstantami a proměnnými.

Možnost explicitní

Veřejná sVAT_Rate As Single

Public Const iMax_Count = 5000

V tomto příkladu vidíte, jak se klíčové slovo Public používá k deklaraci proměnné a co je třeba napsat v editoru jazyka Visual Basic, abyste deklarovali veřejnou konstantu. Rozsah těchto kontejnerů hodnot platí pro všechny moduly.
Možnost explicitní

Private sVAT_Rate As Single

Private Const iMax_Count = 5000

Zde jsou proměnné a konstanty deklarovány pomocí klíčového slova Private. To znamená, že je lze vidět pouze v aktuálním modulu a procedury v jiných modulech je nemohou používat.

Proč jsou potřeba konstanty a proměnné

Použití konstant a proměnných umožňuje zvýšit míru srozumitelnosti kódu. A pokud začátečníci obecně nemají otázky, proč jsou proměnné potřeba, pak existuje mnoho nejasností ohledně potřeby konstant. A tato otázka se zdá na první pohled celkem logická. Proměnnou totiž můžete deklarovat jednou a už ji nikdy neměnit.

Odpověď se ukazuje být někde ve stejné rovině jako s ohledem na použití datových typů, které zabírají velký prostor v paměti. Pokud máme co do činění s velkým množstvím proměnných, můžeme omylem změnit existující kontejner. Pokud uživatel předepíše, že se určitá hodnota nikdy nezmění, bude to prostředí automaticky kontrolovat.

To je zvláště důležité, když makro píše několik programátorů. Člověk může vědět, že některá proměnná by se neměla měnit. A ten druhý ne. Pokud zadáte operátor Const, jiný vývojář bude vědět, že se tato hodnota nemění.

Nebo, pokud existuje konstanta s jedním jménem a proměnná má jiný, ale podobný název. Vývojář je může jednoduše splést. Například jedna proměnná, kterou není třeba měnit, se nazývá Proměnná11 a další, kterou lze upravovat, se nazývá Proměnná1. Člověk může automaticky při psaní kódu omylem přeskočit jednotku navíc a nevšimnout si toho. V důsledku toho se změní kontejner pro hodnoty, kterých by se nemělo dotýkat.

Nebo může vývojář sám zapomenout, na které proměnné se může dotknout a na které ne. To se často stává, když se kód píše několik týdnů a jeho velikost se zvětší. Během této doby je velmi snadné zapomenout i na to, co ta či ona proměnná znamená.

Ano, v této situaci si vystačíte s komentáři, ale není jednodušší specifikovat slovo Const?

Závěry

Proměnné jsou nezbytnou součástí programování maker, které umožňují provádět složité operace, od výpočtů až po informování uživatele o určitých událostech nebo specifikaci konkrétních hodnot v buňkách tabulky.

Konstanty by se měly používat, pokud vývojář s jistotou ví, že obsah těchto kontejnerů se v budoucnu nezmění. Místo toho se doporučuje nepoužívat proměnné, protože je možné omylem udělat chybu.

Napsat komentář