Proměnné a konstanty ve VBA

Ve VBA, stejně jako v každém jiném programovacím jazyce, se proměnné a konstanty používají k uložení libovolných hodnot. Jak název napovídá, proměnné se mohou měnit, zatímco konstanty ukládají pevné hodnoty.

Například konstanta Pi ukládá hodnotu 3,14159265… Číslo „Pi“ se během provádění programu nezmění, ale stále je pohodlnější takovou hodnotu uložit jako konstantu.

Zároveň můžeme použít proměnnou sVAT_Rate ukládat sazbu DPH na zakoupené zboží. Proměnná hodnota sVAT_Rate se může lišit v závislosti na zakoupeném produktu.

Typy dat

Všechny proměnné a konstanty jsou určitého datového typu. Níže uvedená tabulka uvádí datové typy používané ve VBA s popisem a rozsahem možných hodnot:

Datový typ VelikostPopisRozsah hodnot
Byte1 bytůKladná celá čísla; často se používá pro binární dataod 0 do 255
Boolean2 bytůMůže být buď True nebo FalsePravda nebo lež
Celé číslo2 bytůCelá čísla (bez zlomkové části)od -32 do +768
Dlouho4 bytůVelká celá čísla (bez zlomkové části)от -2 147 483 648 до +2 147 483 647
singl4 bytůJedno přesné číslo s plovoucí desetinnou čárkouod -3.4e38 do +3.4e38
Dvojnásobek8 bytůČíslo s plovoucí desetinnou čárkou s dvojitou přesnostíod -1.8e308 do +1.8e308
Měna8 bytůČíslo s plovoucí desetinnou čárkou s pevným počtem desetinných místот -922 337 203 685 477.5808 до +922 337 203 685 477.5807
Datum8 bytůDatum a čas – Data typu Datum jsou reprezentována číslem s plovoucí desetinnou čárkou. Celá část tohoto čísla vyjadřuje datum a zlomková část vyjadřuje čas.od 1. ledna 100 do 31. prosince 9999
Objekt4 bytůOdkaz na objektJakýkoli odkaz na objekt
Řetězecmění seSada znaků. Typ String může mít pevnou nebo proměnnou délku. Častěji se používá s proměnnou délkouPevná délka – až přibližně 65 znaků. Variabilní délka – až přibližně 500 miliard znaků
Variantamění seMůže obsahovat datum, float nebo řetězec znaků. Tento typ se používá v případech, kdy není předem známo, jaký typ údajů bude zadáván.Number – Double, string – String

Je zřejmé, že pomocí výše uvedené tabulky a výběrem správného datového typu můžete paměť využívat ekonomičtěji (např. Celé číslo místo toho Dlouho or singl místo toho Dvojnásobek). Při použití kompaktnějších datových typů si však musíte dávat pozor, aby se do nich váš kód nesnažil vměstnat neúměrně velké hodnoty.

Deklarování proměnných a konstant

Poznámka překladatele: Když už mluvíme o proměnných ve VBA, stojí za zmínku ještě jeden velmi důležitý bod. Pokud deklarujeme proměnnou, ale nepřiřadíme jí žádnou hodnotu, pak se inicializuje s výchozí hodnotou:

• textové řetězce jsou inicializovány prázdnými řetězci;

• čísla — hodnota 0;

• typové proměnné Boolean - Nepravdivé;

• data – 30.

Než lze proměnnou nebo konstantu použít, musí být deklarována. Chcete-li to provést, přidejte do makra následující jednoduchý řádek kódu:

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

Ve výše uvedeném řádku kódu Název proměnné je název proměnné, která bude použita v kódu, a Datový typ je jedním z datových typů z tabulky uvedené o něco dříve v tomto článku. Například:

Dim sVAT_Rate As Single Dim i As Integer

Konstanty se deklarují obdobně, ale při deklaraci konstant je třeba ihned uvést jejich hodnotu. Například takto:

Const iMaxCount = 5000 Const iMaxScore = 100

V Excelu není nutné deklarovat proměnné. Ve výchozím nastavení budou mít všechny zadané, ale nedeklarované proměnné v Excelu typ Varianta a bude schopen přijmout číselnou i textovou hodnotu.

Programátor tedy může použít novou proměnnou kdykoli (i když nebyla deklarována) a Excel s ní bude zacházet jako s proměnnou typu Varianta. Existuje však několik důvodů, proč by se to nemělo dělat:

  1. Využití paměti a výpočetní rychlost. Pokud nedeklarujete proměnnou s uvedením datového typu, pak bude standardně nastavena na typ Varianta. Tento datový typ využívá více paměti než jiné datové typy. Pár bajtů na proměnnou navíc nemusí znít moc, ale v praxi mohou mít programy tisíce proměnných (zejména při práci s poli). Proto extra paměť používaná proměnnými jako Varianta, ve srovnání s proměnnými typu Celé číslo or singl, může přidat až významnou částku. Dále operace s proměnnými typu Varianta jsou prováděny mnohem pomaleji než u proměnných jiných typů, respektive tisíc proměnných typu navíc Varianta může výrazně zpomalit výpočty.
  2. Prevence překlepů v názvech proměnných. Pokud jsou deklarovány všechny proměnné, lze použít příkaz VBA − Možnost explicitní (budeme o tom mluvit později), abychom identifikovali všechny nedeklarované proměnné. Tím se eliminuje výskyt chyby v programu v důsledku nesprávně napsaného názvu proměnné. Například pomocí proměnné s názvem sVAT_Rate, můžete udělat překlep a přiřazením hodnoty této proměnné napsat: „VATRate = 0,175“. Očekává se, že od této chvíle bude proměnná sVAT_Rate by měl obsahovat hodnotu 0,175 – ale samozřejmě nemá. Pokud je povolen režim povinné deklarace všech použitých proměnných, pak kompilátor VBA okamžitě oznámí chybu, protože proměnnou nenajde DPH mezi oznámenými.
  3. Zvýraznění hodnot, které neodpovídají deklarovanému typu proměnné. Pokud deklarujete proměnnou určitého typu a pokusíte se k ní přiřadit data jiného typu, dostanete chybu, která v případě neopravení může způsobit pád programu. Na první pohled se to může zdát jako dobrý důvod, proč proměnné nedeklarovat, ale ve skutečnosti se než dříve ukázalo, že jedna z proměnných obdržela nesprávná data, která obdržet měla – tím lépe! V opačném případě, pokud program pokračuje v běhu, mohou být výsledky nesprávné a neočekávané a bude mnohem obtížnější najít příčinu chyb. Je také možné, že makro bude „úspěšně“ provedeno. Výsledkem je, že chyba zůstane bez povšimnutí a práce bude pokračovat s nesprávnými údaji!

V tomto ohledu je žádoucí odhalit nesprávný datový typ a opravit takové chyby v kódu co nejdříve. Z těchto důvodů se doporučuje, abyste při psaní makra VBA deklarovali všechny proměnné.

Možnost explicitní

Operátor Možnost explicitní způsobí, že budou deklarovány všechny proměnné, které budou použity v kódu VBA, a označí všechny nedeklarované proměnné jako chyby během kompilace (před spuštěním provádění kódu). Použití tohoto operátoru není obtížné – stačí napsat tento řádek úplně nahoře v souboru VBA:

Option Explicit

Pokud chcete vždy vložit Možnost explicitní na začátek každého nového vytvořeného modulu VBA, lze to provést automaticky. Chcete-li to provést, musíte tuto možnost povolit Vyžadovat deklaraci proměnné v nastavení editoru VBA.

To se provádí takto:

  • V nabídce Editor jazyka klepněte na nástroje > možnosti
  • V dialogovém okně, které se zobrazí, otevřete kartu editor
  • Zaškrtněte políčko Vyžadovat deklaraci proměnné a stiskněte OK

Když je povoleno, řetězec Možnost explicitní se automaticky vloží na začátek každého nového vytvořeného modulu.

Rozsah proměnných a konstant

Každá deklarovaná proměnná nebo konstanta má svůj omezený rozsah, tedy omezenou část programu, ve které tato proměnná existuje. Rozsah závisí na tom, kde byla provedena deklarace proměnné nebo konstanty. Vezměte si například proměnnou sVAT_Rate, který se používá ve funkci Celkové náklady. Následující tabulka popisuje dvě možnosti pro variabilní rozsah sVAT_Ratedeklarováno na dvou různých pozicích v modulu:

Možnost Explicit Dim sVAT_Rate As Single Function Total_Cost() As Double... End Function
Pokud proměnná sVAT_Rate deklarován na samém začátku modulu, pak rozsah této proměnné bude celý modul (tj. proměnná sVAT_Rate budou rozpoznány všemi postupy v tomto modulu).

Pokud tedy ve funkci Celkové náklady proměnlivý sVAT_Rate bude přiřazena nějaká hodnota, pak další funkce provedená ve stejném modulu použije proměnnou sVAT_Rate se stejným významem.

Pokud je však volána nějaká funkce umístěná v jiném modulu, pak pro ni proměnná sVAT_Rate nebude známo.

Možnost Explicitní funkce Total_Cost() As Double Dim sVAT_Rate As Single... End Function
Pokud proměnná sVAT_Rate deklarováno na začátku funkce Celkové náklady, pak bude jeho rozsah omezen pouze na tuto funkci (tj. v rámci funkce Celkové náklady, můžete použít proměnnou sVAT_Rate, ale ne venku).

Při pokusu o použití sVAT_Rate v jiném postupu kompilátor VBA ohlásí chybu, protože tato proměnná nebyla deklarována mimo funkci Celkové náklady (za předpokladu, že je použit operátor Možnost explicitní).

Ve výše uvedeném příkladu je proměnná deklarována na úrovni modulu pomocí klíčového slova Slunce. Může však být nutné, aby deklarované proměnné mohly být použity v jiných modulech. V takových případech deklarovat proměnnou místo klíčového slova Slunce musí být použito klíčové slovo Soukromí.

Mimochodem, za účelem deklarování proměnné na úrovni modulu namísto klíčového slova Slunce lze použít klíčové slovo soukromý, což znamená, že tato proměnná je určena pouze pro použití v aktuálním modulu.

K deklaraci konstant můžete také použít klíčová slova. Soukromí и soukromý, ale ne místo klíčového slova Const, spolu s tím.

Následující příklady ukazují použití klíčových slov Soukromí и soukromý aplikované na proměnné a konstanty.

Možnost Explicitní veřejná sVAT_Rate As Single Public Const iMax_Count = 5000 ...    
V tomto příkladu klíčové slovo Soukromí slouží k deklaraci proměnné sVAT_Rate a konstanty iMax_Count. Rozsah takto deklarovaných prvků bude celý aktuální projekt.

To znamená, že sVAT_Rate и iMax_Count bude k dispozici v libovolném modulu projektu.

Možnost Explicit Private sVAT_Rate As Single Private Const iMax_Count = 5000 ...    
V tomto příkladu deklarovat proměnnou sVAT_Rate a konstanty iMax_Count použité klíčové slovo soukromý. Rozsah těchto prvků je aktuální modul.

To znamená, že sVAT_Rate и iMax_Count bude k dispozici ve všech procedurách aktuálního modulu, ale nebude dostupná pro procedury v jiných modulech.

Napsat komentář