Varijable i konstante u VBA

U VBA, kao i u bilo kojem drugom programskom jeziku, varijable i konstante koriste se za pohranjivanje bilo kojih vrijednosti. Kao što naziv implicira, varijable se mogu mijenjati, dok konstante pohranjuju fiksne vrijednosti.

Na primjer, konstanta Pi pohranjuje vrijednost 3,14159265… Broj “Pi” se neće mijenjati tijekom izvođenja programa, ali je ipak zgodnije pohraniti takvu vrijednost kao konstantu.

U isto vrijeme, možemo koristiti varijablu PDV_Stopa za pohranu stope PDV-a na kupljenu robu. Varijabilna vrijednost PDV_Stopa može varirati ovisno o kupljenom proizvodu.

Vrste podataka

Sve varijable i konstante su određenog tipa podataka. Tablica u nastavku navodi tipove podataka koji se koriste u VBA s opisom i rasponom mogućih vrijednosti:

Vrsta podataka VeličinaOpisRaspon vrijednosti
Bajt1 bajtovaPozitivni cijeli brojevi; često se koristi za binarne podatkeod 0 da 255
Booleova2 bajtovaMože biti True ili FalseIstina ili laž
Integer2 bajtovaCijeli brojevi (bez razlomka)od -32 do +768
Dug4 bajtovaVeliki cijeli brojevi (bez razlomka)от -2 147 483 648 до +2 147 483 647
jedan4 bajtovaBroj s pomičnim zarezom jednostruke preciznostiod -3.4e38 do +3.4e38
dvostruko8 bajtovaBroj s pomičnim zarezom dvostruke preciznostiod -1.8e308 do +1.8e308
Valuta8 bajtovaBroj s pomičnim zarezom, s fiksnim brojem decimalnih mjestaот -922 337 203 685 477.5808 до +922 337 203 685 477.5807
Datum8 bajtovaDatum i vrijeme – Podaci tipa Datum predstavljeni su brojem s pomičnim zarezom. Cijeli dio ovog broja izražava datum, a razlomački vrijeme.od 1. siječnja 100. do 31. prosinca 9999
Objekt4 bajtovaReferenca objektaBilo koja referenca objekta
Nizmijenja seSkup znakova. Tip String može biti fiksne ili promjenjive duljine. Češće se koristi s promjenjivom duljinomFiksna duljina – do približno 65 znakova. Promjenjive duljine – do približno 500 milijardi znakova
Varijantamijenja seMože sadržavati datum, float ili znakovni niz. Ova vrsta se koristi u slučajevima kada se unaprijed ne zna koja vrsta podataka će se unijeti.Broj – Duplo, niz – Niz

Očito, korištenjem gornje tablice i odabirom prave vrste podataka možete ekonomičnije koristiti memoriju (na primjer, odaberite vrstu podataka Integer umjesto toga Dug or jedan umjesto toga dvostruko). Međutim, kada koristite kompaktnije tipove podataka, morate paziti da vaš kod ne pokušava u njih uklopiti neproporcionalno velike vrijednosti.

Deklariranje varijabli i konstanti

Napomena prevoditelja: Govoreći o varijablama u VBA, vrijedi spomenuti još jednu vrlo važnu točku. Ako deklariramo varijablu, ali joj ne dodijelimo nikakvu vrijednost, ona se inicijalizira sa zadanom vrijednošću:

• tekstualni nizovi se inicijaliziraju praznim nizovima;

• brojevi — vrijednost 0;

• varijable tipa Booleova — Netočno;

• datumi – 30. prosinca 1899. godine.

Prije nego što se varijabla ili konstanta može koristiti, mora se deklarirati. Da biste to učinili, dodajte sljedeći jednostavni redak koda u makronaredbu:

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

U gornjem retku koda Ime varijable je naziv varijable koja će se koristiti u kodu, i Tip podataka je jedan od tipova podataka iz tablice dane malo ranije u ovom članku. Na primjer:

Dim sVAT_Rate As Single Dim i As Integer

Konstante se deklariraju na sličan način, ali se kod deklaracije konstanti mora odmah navesti njihova vrijednost. Na primjer, ovako:

Const iMaxCount = 5000 Const iMaxScore = 100

U Excelu nije potrebno deklarirati varijable. Prema zadanim postavkama, sve unesene, ali ne i deklarirane varijable u Excelu imat će tip Varijanta i moći će prihvatiti i numeričku i tekstualnu vrijednost.

Dakle, programer može koristiti novu varijablu bilo kada (čak i ako nije deklarirana), a Excel će je tretirati kao varijablu tipa Varijanta. Međutim, postoji nekoliko razloga zašto to ne bi trebalo učiniti:

  1. Upotreba memorije i brzina računanja. Ako ne deklarirate varijablu s naznakom vrste podataka, tada će prema zadanim postavkama biti postavljena na vrstu Varijanta. Ova vrsta podataka koristi više memorije od drugih vrsta podataka. Nekoliko dodatnih bajtova po varijabli možda ne zvuči puno, ali u praksi programi mogu imati tisuće varijabli (posebno kada rade s nizovima). Stoga, dodatna memorija koju koriste varijable poput Varijanta, u usporedbi s varijablama tipa Integer or jedan, može dodati značajan iznos. Osim toga, operacije s varijablama tipa Varijanta izvode se mnogo sporije nego s varijablama drugih tipova, odnosno dodatnih tisuću varijabli tipa Varijanta može znatno usporiti izračune.
  2. Sprječavanje tipfelera u imenima varijabli. Ako su sve varijable deklarirane, tada se može koristiti VBA naredba − Opcija Eksplicitno (o tome ćemo kasnije) kako bismo identificirali sve nedeklarirane varijable. Time se eliminira pojava pogreške u programu kao rezultat neispravno napisanog naziva varijable. Na primjer, pomoću varijable pod nazivom PDV_Stopa, možete pogriješiti pri upisu i, dodijelivši vrijednost ovoj varijabli, napisati: “PDV = 0,175”. Očekuje se da će od sada varijabla PDV_Stopa treba sadržavati vrijednost 0,175 – ali naravno da ne sadrži. Ako je omogućen način obvezne deklaracije svih korištenih varijabli, tada će VBA prevodilac odmah pokazati pogrešku, jer neće pronaći varijablu Stopa PDV-a među najavljenim.
  3. Označavanje vrijednosti koje ne odgovaraju deklariranom tipu varijable. Ako deklarirate varijablu određenog tipa i pokušate joj dodijeliti podatke drugog tipa, dobit ćete pogrešku koja, ako se ne ispravi, može uzrokovati pad programa. Na prvi pogled ovo se može činiti kao dobar razlog da se varijable ne deklariraju, ali zapravo, čim se prije pokaže da je jedna od varijabli dobila krive podatke koje je trebala primiti – tim bolje! U suprotnom, ako se program nastavi izvoditi, rezultati mogu biti netočni i neočekivani, a bit će puno teže pronaći uzrok grešaka. Također je moguće da će se makro "uspješno" izvršiti. Kao rezultat toga, pogreška će proći nezapaženo i rad će se nastaviti s netočnim podacima!

S tim u vezi, poželjno je detektirati neispravan tip podataka i ispraviti takve greške u kodu što je prije moguće. Iz tih razloga preporučuje se da deklarirate sve varijable prilikom pisanja VBA makronaredbe.

Opcija Eksplicitno

Operator Opcija Eksplicitno uzrokuje deklariranje svih varijabli koje će se koristiti u VBA kodu i označava sve nedeklarirane varijable kao pogreške tijekom kompilacije (prije nego što započne izvršavanje koda). Primjena ovog operatora nije teška – samo napišite ovaj redak na samom vrhu VBA datoteke:

Option Explicit

Ako želite uvijek umetati Opcija Eksplicitno na vrh svakog novog stvorenog VBA modula, to se može učiniti automatski. Da biste to učinili, morate omogućiti opciju Zahtijevaj deklaraciju varijable u postavkama VBA editora.

To se radi ovako:

  • Kliknite na izbornik Visual Basic Editor alat > Opcije
  • U dijaloškom okviru koji se pojavi otvorite karticu urednik
  • Označite okvir Zahtijevaj deklaraciju varijable i pritisnite OK

Kada je omogućeno, niz Opcija Eksplicitno automatski će se umetnuti na početak svakog novog kreiranog modula.

Opseg varijabli i konstanti

Svaka deklarirana varijabla ili konstanta ima svoj ograničeni opseg, odnosno ograničeni dio programa u kojem ta varijabla postoji. Opseg ovisi o tome gdje je napravljena deklaracija varijable ili konstante. Uzmimo, na primjer, varijablu PDV_Stopa, koji se koristi u funkciji Ukupni trošak. Sljedeća tablica govori o dvije opcije za opseg varijable PDV_Stopadeklariran na dvije različite pozicije u modulu:

Opcija Eksplicitno Dim sVAT_Rate kao jedna funkcija Total_Cost() kao dvostruka ... krajnja funkcija
Ako varijabla PDV_Stopa deklariran na samom početku modula, tada će opseg ove varijable biti cijeli modul (tj. varijabla PDV_Stopa prepoznat će sve procedure u ovom modulu).

Stoga, ako je u funkciji Ukupni trošak varijabla PDV_Stopa će se dodijeliti neka vrijednost, tada će sljedeća funkcija koja se izvrši unutar istog modula koristiti tu varijablu PDV_Stopa s istim značenjem.

Međutim, ako se pozove neka funkcija koja se nalazi u drugom modulu, tada je za nju varijabla PDV_Stopa neće se znati.

Opcija Eksplicitna funkcija Total_Cost() As Double Dim sVAT_Rate As Single ... Kraj funkcije
Ako varijabla PDV_Stopa deklariran na početku funkcije Ukupni trošak, tada će njegov opseg biti ograničen samo na ovu funkciju (tj. unutar funkcije Ukupni trošak, možete koristiti varijablu PDV_Stopa, ali ne izvana).

Prilikom pokušaja korištenja PDV_Stopa u drugoj proceduri, VBA prevodilac će prijaviti pogrešku jer ova varijabla nije deklarirana izvan funkcije Ukupni trošak (pod uvjetom da se koristi operator Opcija Eksplicitno).

U primjeru prikazanom iznad, varijabla je deklarirana na razini modula s ključnom riječi zamagliti. Međutim, može biti potrebno da se deklarirane varijable mogu koristiti u drugim modulima. U takvim slučajevima, deklarirati varijablu umjesto ključne riječi zamagliti mora se koristiti ključna riječ javnost.

Usput, kako bi deklarirali varijablu na razini modula, umjesto ključne riječi zamagliti može se koristiti ključna riječ Privatni, što označava da je ova varijabla namijenjena za korištenje samo u trenutnom modulu.

Također možete koristiti ključne riječi za deklariranje konstanti. javnost и Privatni, ali ne umjesto ključne riječi Konst, zajedno s njim.

Sljedeći primjeri pokazuju korištenje ključnih riječi javnost и Privatni primijenjen na varijable i konstante.

Opcija Eksplicitna javna sVAT_stopa kao jedinstveni javni utrošak iMax_Count = 5000 ...    
U ovom primjeru ključna riječ javnost koristi se za deklaraciju varijable PDV_Stopa i konstante iMax_Count. Opseg elemenata deklariranih na ovaj način bit će cijeli trenutni projekt.

To znači da PDV_Stopa и iMax_Count bit će dostupni u bilo kojem modulu projekta.

Opcija Eksplicitna privatna sVAT_Rate kao jedna privatna konst iMax_Count = 5000 ...    
U ovom primjeru, za deklaraciju varijable PDV_Stopa i konstante iMax_Count korištena ključna riječ Privatni. Opseg ovih elemenata je trenutni modul.

To znači da PDV_Stopa и iMax_Count bit će dostupni u svim procedurama trenutnog modula, ali neće biti dostupni procedurama u drugim modulima.

Ostavi odgovor