Premenné a konštanty vo VBA

Vo VBA, rovnako ako v každom inom programovacom jazyku, sa premenné a konštanty používajú na ukladanie akýchkoľvek hodnôt. Ako už názov napovedá, premenné sa môžu meniť, zatiaľ čo konštanty ukladajú pevné hodnoty.

Napríklad konštanta Pi ukladá hodnotu 3,14159265... Číslo „Pi“ sa počas vykonávania programu nezmení, ale stále je pohodlnejšie takúto hodnotu uložiť ako konštantu.

Zároveň môžeme použiť premennú sVAT_rate na nakúpený tovar uložiť sadzbu DPH. Variabilná hodnota sVAT_rate sa môže líšiť v závislosti od zakúpeného produktu.

Dátové typy

Všetky premenné a konštanty sú určitého typu údajov. V tabuľke nižšie sú uvedené typy údajov používané vo VBA s popisom a rozsahom možných hodnôt:

Dátový typ VeľkosťPopisRozsah hodnôt
byte1 bytovkladné celé čísla; často používané pre binárne dátaod 0 do 255
boolean2 bytovMôže byť buď Pravda alebo NepravdaPravda alebo lož
Celé číslo2 bytovCelé čísla (bez zlomkovej časti)od -32 do +768
Dlho4 bytovVeľké celé čísla (bez zlomkovej časti)от -2 147 483 648 до +2 147 483 647
jediný4 bytovJedno presné číslo s pohyblivou rádovou čiarkouod -3.4e38 do +3.4e38
dvojitý8 bytovDvojnásobná presnosť čísla s pohyblivou rádovou čiarkouod -1.8e308 do +1.8e308
mena8 bytovČíslo s pohyblivou rádovou čiarkou s pevným počtom desatinných miestот -922 337 203 685 477.5808 до +922 337 203 685 477.5807
dátum8 bytovDátum a čas – Údaje typu Dátum sú reprezentované číslom s pohyblivou rádovou čiarkou. Celá časť tohto čísla vyjadruje dátum a zlomková časť vyjadruje čas.od 1. januára 100 do 31. decembra 9999
objekt4 bytovOdkaz na objektAkýkoľvek odkaz na objekt
Reťazecsa meníSada znakov. Typ String môže mať pevnú alebo premenlivú dĺžku. Častejšie používané s premenlivou dĺžkouPevná dĺžka – do približne 65 znakov. Variabilná dĺžka – až približne 500 miliárd znakov
Variantasa meníMôže obsahovať dátum, plávajúcu čiaru alebo reťazec znakov. Tento typ sa používa v prípadoch, keď nie je vopred známe, aký typ údajov sa bude zadávať.Číslo – Double, string – String

Je zrejmé, že použitím vyššie uvedenej tabuľky a výberom správneho typu údajov môžete pamäť využívať ekonomickejšie (napríklad vyberte typ údajov Celé číslo namiesto toho Dlho or jediný namiesto toho dvojitý). Pri používaní kompaktnejších dátových typov si však musíte dávať pozor, aby sa váš kód nesnažil do nich vtesnať neúmerne veľké hodnoty.

Deklarovanie premenných a konštánt

Poznámka prekladateľa: Keď už hovoríme o premenných vo VBA, stojí za zmienku ešte jeden veľmi dôležitý bod. Ak deklarujeme premennú, ale nepriradíme jej žiadnu hodnotu, potom sa inicializuje s predvolenou hodnotou:

• textové reťazce sú inicializované prázdnymi reťazcami;

• čísla — hodnota 0;

• typové premenné boolean — Nepravdivé;

• dátumy – 30.

Pred použitím premennej alebo konštanty je potrebné ju deklarovať. Ak to chcete urobiť, pridajte do makra nasledujúci jednoduchý riadok kódu:

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

Vo vyššie uvedenom riadku kódu Názov premennej je názov premennej, ktorá sa použije v kóde, a Dátový typ je jedným z dátových typov z tabuľky uvedenej o niečo skôr v tomto článku. Napríklad:

Dim sVAT_Rate As Single Dim i As Integer

Konštanty sa deklarujú podobne, ale pri deklarovaní konštánt treba ihneď uviesť ich hodnotu. Napríklad takto:

Const iMaxCount = 5000 100 Const iMaxScore = XNUMX

V Exceli nie je potrebné deklarovať premenné. V predvolenom nastavení budú mať všetky zadané, ale nedeklarované premenné v Exceli typ Varianta a bude schopný akceptovať číselné aj textové hodnoty.

Programátor teda môže použiť novú premennú kedykoľvek (aj keď nebola deklarovaná) a Excel s ňou bude zaobchádzať ako s premennou typu Varianta. Existuje však niekoľko dôvodov, prečo by sa to nemalo robiť:

  1. Využitie pamäte a výpočtová rýchlosť. Ak nedeklarujete premennú s uvedením dátového typu, potom bude štandardne nastavená na typ Varianta. Tento typ údajov využíva viac pamäte ako iné typy údajov. Pár bajtov na premennú navyše nemusí znieť ako veľa, ale v praxi môžu mať programy tisíce premenných (najmä pri práci s poľami). Preto dodatočná pamäť používaná premennými ako Variantav porovnaní s premennými typu Celé číslo or jediný, môže dosiahnuť značnú sumu. Okrem toho operácie s premennými typu Varianta sa vykonávajú oveľa pomalšie ako pri premenných iných typov, respektíve tisíc premenných typu navyše Varianta môže výrazne spomaliť výpočty.
  2. Prevencia preklepov v názvoch premenných. Ak sú deklarované všetky premenné, potom možno použiť príkaz VBA − Možnosť Explicitná (povieme si o tom neskôr), aby sme identifikovali všetky nedeklarované premenné. Tým sa eliminuje výskyt chyby v programe v dôsledku nesprávne napísaného názvu premennej. Napríklad pomocou premennej s názvom sVAT_rate, môžete urobiť preklep a priradením hodnoty tejto premennej napísať: „VATRate = 0,175“. Očakáva sa, že odteraz bude premenná sVAT_rate by mal obsahovať hodnotu 0,175 – ale samozrejme nemá. Ak je povolený režim povinnej deklarácie všetkých použitých premenných, kompilátor VBA okamžite oznámi chybu, pretože premennú nenájde DPH medzi oznámenými.
  3. Zvýraznenie hodnôt, ktoré sa nezhodujú s deklarovaným typom premennej. Ak deklarujete premennú určitého typu a pokúsite sa k nej priradiť údaje iného typu, dostanete chybu, ktorá, ak ju neopravíte, môže spôsobiť zlyhanie programu. Na prvý pohľad sa to môže zdať ako dobrý dôvod nedeklarovať premenné, no v skutočnosti sa skôr ukázalo, že jedna z premenných dostala nesprávne údaje, ktoré mala dostať – tým lepšie! V opačnom prípade, ak program naďalej beží, výsledky môžu byť nesprávne a neočakávané a bude oveľa ťažšie nájsť príčinu chýb. Je tiež možné, že makro bude „úspešne“ vykonané. V dôsledku toho chyba zostane bez povšimnutia a práca bude pokračovať s nesprávnymi údajmi!

V tejto súvislosti je žiaduce odhaliť nesprávny typ údajov a opraviť takéto chyby v kóde čo najskôr. Z týchto dôvodov sa odporúča, aby ste pri písaní makra VBA deklarovali všetky premenné.

Možnosť Explicitná

operátor Možnosť Explicitná spôsobí, že všetky premenné, ktoré budú použité v kóde VBA, budú deklarované a všetky nedeklarované premenné budú označené ako chyby počas kompilácie (pred spustením vykonávania kódu). Použitie tohto operátora nie je ťažké – stačí napísať tento riadok úplne hore do súboru VBA:

Option Explicit

Ak chcete vždy vložiť Možnosť Explicitná na začiatok každého nového vytvoreného modulu VBA, môže to byť vykonané automaticky. Ak to chcete urobiť, musíte túto možnosť povoliť Vyžadovať vyhlásenie o premennej v nastaveniach editora VBA.

To sa robí takto:

  • V ponuke Editor jazyka Visual Basic kliknite na náradie > možnosti
  • V zobrazenom dialógovom okne otvorte kartu editor
  • Začiarknite políčko Vyžadovať vyhlásenie o premennej a stlačte OK

Keď je povolený, reťazec Možnosť Explicitná sa automaticky vloží na začiatok každého nového vytvoreného modulu.

Rozsah premenných a konštánt

Každá deklarovaná premenná alebo konštanta má svoj obmedzený rozsah, teda obmedzenú časť programu, v ktorej táto premenná existuje. Rozsah závisí od toho, kde bola vykonaná deklarácia premennej alebo konštanty. Vezmite si napríklad premennú sVAT_rate, ktorý sa používa vo funkcii Celkové náklady. Nasledujúca tabuľka popisuje dve možnosti variabilného rozsahu sVAT_ratedeklarované na dvoch rôznych pozíciách v module:

Možnosť Explicitné Dim sVAT_Rate As Single Function Total_Cost() As Double... End Function
Ak premenná sVAT_rate deklarované na samom začiatku modulu, potom rozsah tejto premennej bude celý modul (tj premenná sVAT_rate budú rozpoznané všetkými postupmi v tomto module).

Ak teda vo funkcii Celkové náklady premenlivý sVAT_rate bude priradená nejaká hodnota, potom nasledujúca funkcia vykonaná v rámci toho istého modulu použije premennú sVAT_rate s rovnakým významom.

Ak sa však zavolá nejaká funkcia nachádzajúca sa v inom module, potom pre ňu premenná sVAT_rate nebude známe.

Možnosť Explicitná funkcia Total_Cost() As Double Dim sVAT_Rate As Single... End Function
Ak premenná sVAT_rate deklarované na začiatku funkcie Celkové náklady, potom bude jeho rozsah obmedzený len na túto funkciu (tj v rámci funkcie Celkové náklady, môžete použiť premennú sVAT_rate, ale nie vonku).

Pri pokuse o použitie sVAT_rate v inom postupe kompilátor VBA ohlási chybu, pretože táto premenná nebola deklarovaná mimo funkcie Celkové náklady (za predpokladu, že sa používa operátor Možnosť Explicitná).

Vo vyššie uvedenom príklade je premenná deklarovaná na úrovni modulu s kľúčovým slovom Stlmiť. Môže však byť potrebné, aby deklarované premenné mohli byť použité v iných moduloch. V takýchto prípadoch deklarovať premennú namiesto kľúčového slova Stlmiť musí byť použité kľúčové slovo Verejnosť.

Mimochodom, s cieľom deklarovať premennú na úrovni modulu namiesto kľúčového slova Stlmiť možno použiť kľúčové slovo Súkromný, čo znamená, že táto premenná je určená na použitie iba v aktuálnom module.

Na deklarovanie konštánt môžete použiť aj kľúčové slová. Verejnosť и Súkromný, ale nie namiesto kľúčového slova const, spolu s tým.

Nasledujúce príklady ukazujú použitie kľúčových slov Verejnosť и Súkromný aplikované na premenné a konštanty.

Možnosť Explicitná verejná sVAT_Rate As Single Public Const iMax_Count = 5000 ...    
V tomto príklade kľúčové slovo Verejnosť používa sa na deklarovanie premennej sVAT_rate a konštanty iMax_Count. Rozsahom takto deklarovaných prvkov bude celý aktuálny projekt.

To znamená, že sVAT_rate и iMax_Count bude k dispozícii v ktoromkoľvek module projektu.

Možnosť Explicit Private sVAT_Rate As Single Private Const iMax_Count = 5000 ...    
V tomto príklade deklarovať premennú sVAT_rate a konštanty iMax_Count použité kľúčové slovo Súkromný. Rozsah týchto prvkov je aktuálny modul.

To znamená, že sVAT_rate и iMax_Count budú dostupné vo všetkých procedúrach aktuálneho modulu, ale nebudú dostupné pre procedúry v iných moduloch.

Nechaj odpoveď