Varijable i konstante u VBA

U VBA, kao iu svakom drugom programskom jeziku, varijable i konstante se koriste za pohranjivanje bilo koje vrijednosti. Kao što naziv govori, varijable se mogu mijenjati, dok konstante pohranjuju fiksne vrijednosti.

Na primjer, konstanta Pi pohranjuje vrijednost 3,14159265… Broj “Pi” se neće mijenjati tokom izvršavanja programa, ali je ipak pogodnije pohraniti takvu vrijednost kao konstantu.

U isto vrijeme, možemo koristiti varijablu sVAT_stopa da pohrani stopu PDV-a na kupljenu robu. Varijabilna vrijednost sVAT_stopa može varirati ovisno o kupljenom proizvodu.

Tipovi podataka

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

Tip podataka veličinaOpisRaspon vrijednosti
bajt1 bajtovaPozitivni cijeli brojevi; često se koristi za binarne podatkeod 0 do 255
Boolean2 bajtovaMože biti ili Tačno ili NetačnoTačno ili netačno
integer2 bajtovaCijeli brojevi (bez razlomaka)od -32 do +768
dugačak4 bajtovaVeliki cijeli brojevi (bez razlomaka)от -2 147 483 648 до +2 147 483 647
jedan4 bajtovaBroj s pomičnim zarezom sa jednom preciznošćuod -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 su predstavljeni brojem s pomičnim zarezom. Cjelobrojni dio ovog broja izražava datum, a razlomak vrijeme.od 1. januara 100. do 31. decembra 9999
objekt4 bajtovaReferenca objektaBilo koja referenca objekta
nizse mijenjaSkup znakova. Tip String može biti fiksne ili promjenjive dužine. Češće se koristi s promjenjivom dužinomFiksna dužina – do približno 65 karaktera. Varijabilna dužina – do približno 500 milijardi znakova
varijantase mijenjaMože sadržavati datum, float ili niz znakova. Ovaj tip se koristi u slučajevima kada nije unaprijed poznato koja će se vrsta podataka unijeti.Broj – Dvostruki, niz – String

Očigledno, koristeći gornju tablicu i odabirom odgovarajuće vrste podataka, možete ekonomičnije koristiti memoriju (na primjer, odaberite tip podataka integer umjesto toga dugačak or jedan umjesto toga dvostruko). Međutim, kada koristite kompaktnije tipove podataka, morate biti oprezni da vaš kod ne pokušava u njih uklopiti nesrazmjerno velike vrijednosti.

Deklarisanje varijabli i konstanti

Napomena prevodioca: Govoreći o varijablama u VBA, vredi pomenuti još jednu veoma važnu tačku. Ako deklarišemo varijablu, ali joj ne dodijelimo nikakvu vrijednost, tada se ona inicijalizira sa zadanom vrijednošću:

• tekstualni nizovi se inicijaliziraju praznim nizovima;

• brojevi — vrijednost 0;

• varijable tipa Boolean — False;

• datumi – 30. decembar 1899. godine.

Prije nego što se može koristiti varijabla ili konstanta, ona mora biti deklarirana. Da biste to učinili, dodajte sljedeću jednostavnu liniju koda u makro:

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

U gornjoj liniji koda Ime_varijable je ime varijable koja će se koristiti u kodu, i Data_Type je jedan od tipova podataka iz tabele date malo ranije u ovom članku. Na primjer:

Dim sVAT_Rate As Single Dim i As Integer

Konstante se deklarišu na sličan način, ali kada se deklarišu konstante, njihova vrijednost mora biti odmah naznačena. Na primjer, ovako:

Const iMaxCount = 5000 Const iMaxScore = 100

Nije potrebno deklarisati varijable u Excel-u. Prema zadanim postavkama, sve unesene, ali nedeklarirane varijable u Excelu će imati tip varijanta i moći će prihvatiti i numeričku i tekstualnu vrijednost.

Dakle, programer može koristiti novu varijablu u bilo kojem trenutku (č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 tipa podataka, tada će ona po defaultu biti postavljena na tip varijanta. Ovaj tip podataka koristi više memorije od drugih tipova podataka. Nekoliko dodatnih bajtova po varijabli možda ne zvuči puno, ali u praksi programi mogu imati hiljade varijabli (posebno kada rade sa nizovima). Stoga, dodatna memorija koju koriste varijable poput varijanta, u poređenju sa varijablama tipa integer or jedan, može dodati značajan iznos. Osim toga, operacije s varijablama tipa varijanta se izvršavaju mnogo sporije nego sa varijablama drugih tipova, odnosno dodatnih hiljadu varijabli tipa varijanta može značajno usporiti proračune.
  2. Sprečavanje grešaka u kucanju u nazivima varijabli. Ako su deklarirane sve varijable, onda se VBA izraz može koristiti − Opcija Eksplicitna (o tome ćemo kasnije) da bismo identifikovali sve nedeklarisane varijable. Ovo eliminiše pojavu greške u programu kao rezultat pogrešno napisanog imena varijable. Na primjer, korištenjem varijable named sVAT_stopa, možete napraviti grešku u kucanju i, dodijelivši vrijednost ovoj varijabli, napisati: “VATRate = 0,175”. Očekuje se da će od sada, varijabla sVAT_stopa treba da sadrži vrijednost 0,175 – ali naravno ne. Ako je omogućen način obavezne deklaracije svih korištenih varijabli, tada će VBA kompajler odmah ukazati na grešku, jer neće pronaći varijablu VATRate među najavljenim.
  3. Isticanje vrijednosti koje se ne podudaraju s deklariranim tipom varijable. Ako deklarirate varijablu određenog tipa i pokušate joj dodijeliti podatke drugog tipa, dobit ćete grešku koja, ako se ne ispravi, može uzrokovati pad programa. Na prvi pogled, ovo može izgledati kao dobar razlog da se varijable ne deklarišu, ali u stvari, nego prije, ispostavilo se da je jedna od varijabli primila pogrešne podatke koje je trebala primiti – tim bolje! U suprotnom, ako program nastavi da radi, rezultati mogu biti netačni i neočekivani, te će biti mnogo teže pronaći uzrok grešaka. Također je moguće da će makro biti "uspješno" izvršen. Kao rezultat toga, greška će ostati neprimijećena i rad će se nastaviti s netočnim podacima!

S tim u vezi, poželjno je otkriti neispravan tip podataka i ispraviti takve greške u kodu što je prije moguće. Iz ovih razloga, preporučuje se da deklarišete sve varijable kada pišete VBA makro.

Opcija Eksplicitna

operator Opcija Eksplicitna uzrokuje da se deklariraju sve varijable koje će se koristiti u VBA kodu i označava sve nedeklarirane varijable kao greške tokom kompilacije (prije nego što izvršavanje koda počne). Primjena ovog operatora nije teška – samo napišite ovaj red na samom vrhu VBA datoteke:

Option Explicit

Ako želite uvijek umetnuti Opcija Eksplicitna na vrh svakog novog VBA modula kreiranog, ovo se može uraditi automatski. Da biste to učinili, morate omogućiti opciju Zahtijeva deklaraciju varijable u postavkama VBA editora.

Ovo se radi ovako:

  • U meniju Visual Basic Editor kliknite alat > mogućnosti
  • U dijalogu koji se pojavi otvorite karticu urednik
  • Označite kućicu Zahtijeva deklaraciju varijable i pritisnite OK

Kada je omogućeno, string Opcija Eksplicitna će se automatski 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 ova varijabla postoji. Opseg zavisi od toga gde je napravljena deklaracija varijable ili konstante. Uzmimo, na primjer, varijablu sVAT_stopa, koji se koristi u funkciji Ukupni troškovi. Sljedeća tabela govori o dvije opcije za promjenjiv opseg sVAT_stopadeklarirano na dvije različite pozicije u modulu:

Opcija Eksplicitno Dim sVAT_Stopa kao pojedinačna funkcija Ukupni_trošak() kao dvostruka ... Krajnja funkcija
Ako je varijabla sVAT_stopa deklarirano na samom početku modula, tada će opseg ove varijable biti cijeli modul (tj. varijabla sVAT_stopa će biti prepoznate od strane svih procedura u ovom modulu).

Stoga, ako je u funkciji Ukupni troškovi varijabla sVAT_stopa će biti dodijeljena neka vrijednost, tada će sljedeća funkcija koja se izvršava unutar istog modula koristiti varijablu sVAT_stopa sa istim značenjem.

Međutim, ako se pozove neka funkcija koja se nalazi u drugom modulu, onda je za nju varijabla sVAT_stopa neće biti poznato.

Opcija Eksplicitna funkcija Total_Cost() As Double Dim sVAT_Rate As Single ... End Funkcija
Ako je varijabla sVAT_stopa deklarirano na početku funkcije Ukupni troškovi, tada će njegov opseg biti ograničen samo na ovu funkciju (tj. unutar funkcije Ukupni troškovi, možete koristiti varijablu sVAT_stopa, ali ne napolju).

Prilikom pokušaja korištenja sVAT_stopa u drugoj proceduri, VBA kompajler će prijaviti grešku jer ova varijabla nije deklarirana izvan funkcije Ukupni troškovi (pod uslovom da se koristi operator Opcija Eksplicitna).

U primjeru prikazanom iznad, varijabla je deklarirana na nivou modula pomoću ključne riječi Dim. 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 Dim ključna riječ se mora koristiti Javni.

Inače, da bi se deklarisala varijabla na nivou modula, umjesto ključne riječi Dim može se koristiti ključna riječ privatan, što ukazuje da je ova varijabla namijenjena za korištenje samo u trenutnom modulu.

Također možete koristiti ključne riječi za deklariranje konstanti. Javni и privatan, ali ne umjesto ključne riječi Konst, zajedno sa njim.

Sljedeći primjeri pokazuju upotrebu ključnih riječi Javni и privatan primijenjen na varijable i konstante.

Opcija Explicit Public sVAT_Rate As Single Public Const iMax_Count = 5000 ...    
U ovom primjeru, ključna riječ Javni koristi se za deklaraciju varijable sVAT_stopa i konstante iMax_Count. Ovako deklarirani opseg elemenata će biti cijeli tekući projekat.

Ovo znači to sVAT_stopa и iMax_Count će biti dostupan u bilo kojem modulu projekta.

Opcija Explicit Private sVAT_Rate As Single Private Const iMax_Count = 5000 ...    
U ovom primjeru, za deklariranje varijable sVAT_stopa i konstante iMax_Count korištena ključna riječ privatan. Opseg ovih elemenata je trenutni modul.

Ovo znači to sVAT_stopa и iMax_Count biće dostupan u svim procedurama trenutnog modula, ali neće biti dostupan za procedure u drugim modulima.

Ostavite odgovor