Uvod
U ovom se članku opisuje kako koristiti varijable u podprocedurama programa Microsoft Excel u jeziku Microsoft Visual Basic for Applications.
Dodatne informacije
Variables in a sub procedure
Moćna značajka programskih jezika je mogućnost pohranjivanja nečega u varijablu tako da se sadržaj varijable može koristiti ili promijeniti kasnije u postupku. U ovom se dokumentu objašnjava sljedeća upotreba varijabli u jeziku Visual Basic:
- Kako se deklariraju varijable.
- Postupci i projekti koji koriste varijablu.
- Vijek trajanja varijable.
Deklariranje varijable u makronaredbi
Najjednostavniji način deklariranja varijable u makronaredbi jest naredba Dim. Sljedeći redak deklarira dvije varijable kao cijele brojeve:
Dim x As Integer, y As Integer
Ako su znakovi x i y navedeni kao cijeli brojevi, programu Visual Basic naređujete da odvoji dovoljno memorije za cjelobrojnu varijablu (po dva bajta za x i y) te da su informacije pohranjene u obliku x ili y cijeli brojevi između -32768 i 32767.
NAPOMENA: Ako deklarirate više varijabli pomoću jedne Dim naredbe, morate navesti vrstu podataka za svaku varijablu.
Ako ne navedete vrstu podataka za svaku varijablu, kao u sljedećem kodu jezika Visual Basic, samo je varijabla y postavljena kao cjelobrojna varijabla. Varijabla x bit će vrste varijante:
Dim x, y As Integer
Dodatne informacije potražite u vrsti podataka Variant u nastavku.
Da biste testirali varijable, slijedite ove korake:
Spremite i zatvorite sve otvorene radne knjige, a zatim otvorite novu radnu knjigu.
Pokretanje modula Visual Basic Editor (pritisnite ALT+F11).
Na izborniku Umetanje kliknite Moduli.
Upišite sljedeći kod:
Sub Variable_Test()
Dim x Kao cijeli broj, y kao cijeli broj
x = 10
y = 100
MsgBox "vrijednost x je " & x & _
Chr(13) & "vrijednost y je " & y
End SubPokrenite makronaredbu Variable_Test . Prikazat će vam se sljedeća poruka:
the value of x is 10
the value of y is 100Kliknite U redu.
U makronaredbi Variable_Test promijenite sljedeći redak:
x = 10Primatelji:
x = "error"Pokrenite makronaredbu Variable_Test .
Prikazat će vam se pogreška pri izvođenju jer "pogreška" nije cijeli broj, a pokušavate dodijeliti ovu vrijednost niza cjelobrojnoj varijabli x.
Sažetak vrste podataka
Ovo su uobičajene vrste podataka varijabli:
vrsta podatka Variant
Ako pri deklariranju varijable ne navedete vrstu podataka ili je uopće ne deklarirate, Visual Basic automatski navodi vrstu podataka variant za tu varijablu. Prednosti varijabli koje su deklarirane kao ova vrsta podataka navedene su u nastavku:
- Varijable mogu sadržavati vrijednosti niza, datum, vrijeme, Booleove vrijednosti ili brojčane vrijednosti.
- Varijable mogu automatski pretvoriti vrijednosti koje sadrže.
Nedostatak je što varijable varijable zahtijevaju najmanje 16 bajtova memorije. 16 bajtova memorije može biti značajno u velikim postupcima ili u složenim modulima.
Da biste vidjeli kako to funkcionira u makronaredbi Variable_Test, slijedite ove korake:
Promijenite kod u makronaredbi Variable_Test u:
Sub Variable_Test()
Dim x, y
x = "string"
y = 1.23
MsgBox "the value of x is " & x & _
Chr(13) & "the value of y is " & y
End Sub
Pokrenite makronaredbu Variable_Test .
Nećete primiti pogrešku jer varijable variant x i y možete dodijeliti bilo što.
NAPOMENA: Možete i izostaviti sljedeći redak, pa će makronaredba i dalje funkcionirati jer se varijable x i y tretiraju kao vrste podataka Variant:
Dim x, y
Opseg varijable
Kada deklarirate varijablu, ona se može ili ne mora vidjeti u drugim makronaredbama u istom modulu, u drugim modulima ili u drugim projektima. Ta raspoloživost varijable u modulima naziva se opseg. Tri vrste područja primjene su na razini postupka, privatni modul i javni modul. Opseg ovisi o tome kako i gdje deklarirate varijablu ili varijable.
Djelokrug na razini postupka
Varijabla s djelokrugom na razini postupka ne vidi se izvan postupka u kojem je deklarirana. Ako postavite vrijednost varijable s djelokrugom na razini procedure, ostale makronaredbe neće vidjeti sadržaj te varijable.
Da biste provjerili ne vidi li se varijabla s djelokrugom na razini procedure izvan procedure u kojoj je deklarirana, slijedite ove korake:
Umetnite novi modul u projekt.
U modul upišite obje sljedeće makronaredbe:
Sub Macro1() Dim x As Integer x = 10 MsgBox "x, kao što vidi Macro1 je " & x 'sljedeći redak prolazi Macro2 Macro2 End Sub Sub Macro2() MsgBox "x, as seen by Macro2 is " & x End SubPokrenite makronaredbu1 i prikazat će se sljedeća poruka:
x, as seen by Macro1 is 10Kliknite U redu i prikazat će vam se sljedeća poruka:
x, as seen by Macro2 isKliknite U redu.
Makronaredba2 ne prikazuje vrijednost za varijablu x jer je varijabla x lokalna za Makronaredbu1.
Privatni i javni opseg na razini modula
U odjeljku s deklaracijama u modulu možete definirati varijable (pri vrhu modula, prije svih podprocedura) te postaviti opseg varijable pomoću izjave Javno, Dim naredbe ili Privatne naredbe. Ako ispred varijable postavite javnu izjavu, ona će biti dostupna svim makronaredbama u svim modulima projekta. Ako ispred varijable postavite naredbu Dim ili Private naredbu, varijabla je dostupna samo makronaredbama u modulu u kojem se deklarira.
Da biste vidjeli razliku između izjave Javno i Dim izjave, slijedite ove korake:
Spremite i zatvorite sve otvorene radne knjige, a zatim otvorite novu radnu knjigu.
Pokrenite Visual Basic Editor.
Umetnite modul u projekt.
-
Type the following code into this module: Public x As Integer Sub Macro_1a() x = 10 MsgBox x Macro_1b End Sub Sub Macro_1b() x = x * 2 MsgBox x Macro2 End Sub Umetnite još jedan modul u projekt.
U taj modul upišite sljedeći kod:
Sub Macro2()
x = x * 3
MsgBox x
End SubPokrenite makronaredbu Macro_1a prvom modulu.
Ako je varijabla x deklarirana kao "Javni x Kao cijeli broj", sve tri makronaredbe u projektu imaju pristup vrijednosti x. U prvom okviru poruke prikazuje se vrijednost 10. U drugom okviru poruke prikazuje se vrijednost 20 (jer se x množi s 2 u Macro_1b). Treći okvir poruke prikazuje vrijednost 60 (jer je vrijednost x promijenjena u 20 u Macro_1b, a zatim je pomnožena s 3 u makronaredbi2).
Promijenite redak deklaracije u prvom modulu iz:
Public x As IntegerPrimatelji:
Dim x As IntegerPokrenite makronaredbu Macro_1a .
Uz varijablu x deklariranu kao "Dim x As Integer" samo makronaredbe u prvom modulu imaju pristup vrijednosti x. Dakle, u prvom okviru poruke prikazuje se vrijednost 10, u drugom se prikazuje vrijednost 20 (jer se x množi s 2 u Macro_1b), a u trećem okviru poruke prikazuje se vrijednost 0 (jer makronaredba 2 ne vidi vrijednost x, a makronaredba 2 koristi neinicijaliziranu vrijednost nula).
Promijenite redak deklaracije u prvom modulu iz:
Dim x As IntegerPrimatelji:
Private x As IntegerPokrenite makronaredbu Macro_1a .
Pomoću opsega izjave Private isti će se okviri s porukama prikazivati kao i pri korištenju naredbe Dim. Varijabla x ima isti opseg, privatno za modul u kojem je deklarirana.
NAPOMENA: Ako želite opseg varijable ograničiti na modul u kojem je deklarirana, koristite naredbu Privatestatement umjesto naredbe Dim. Obje postižu isti učinak, ali opseg je jasniji kada pročitate kod ako koristite naredbu Private.
Vijek trajanja varijable
Vrijeme tijekom kojeg varijabla zadržava svoju vrijednost naziva se njezinim vijekom trajanja. Vrijednost varijable može se promijeniti tijekom svog životnog ciklusa, ali će zadržati vrijednost. Također, kada varijabla izgubi opseg, ona više nema vrijednost.
Inicijalizacija vrijednosti varijable
Kada pokrenete makronaredbu, sve se varijable inicijaliziraju u vrijednost. Numerička varijabla inicijalizira se na nulu, niz promjenjive duljine inicijalizira se na niz nulte duljine (""), a niz fiksne duljine ispunjava se ASCII kodom 0. Varijable variant inicijaliziraju se u Empty. Prazna varijabla predstavljena je nulom u brojčanom kontekstu i nizom nulte duljine ("") u kontekstu niza.
Varijable na razini procedure
Ako postoji varijabla koja je deklarirana u makronaredbi pomoću naredbe Dim, varijabla zadržava svoju vrijednost dok se makronaredba izvodi. Ako makronaredba poziva druge makronaredbe, vrijednost varijable se zadržava (ali nije dostupna drugim makronaredbama) sve dok se i te makronaredbe izvode.
Da biste pokazali kako funkcioniraju varijable na razini procedure, slijedite ove korake:
Umetnite novi modul u projekt.
U modul upišite obje sljedeće makronaredbe:
Sub Macro1()
'set x as a procedure level variable
Dim x As Integer
MsgBox "inicijalizirana vrijednost x je" & x
x = 10
MsgBox "x je " & x
'Sljedeći redak pokreće Makronaredba2
Makronaredba2
MsgBox "x je i dalje " & x
End Sub
Sub Macro2()
MsgBox "x, kao što vidi Makronaredba2 je " & x
End SubPokretanje makronaredbe1.
Prikazat će vam se sljedeća poruka:
the initialized value of x is 0Kliknite U redu i prikazat će vam se sljedeća poruka:
x is 10Kliknite U redu i prikazat će vam se sljedeća poruka:
x, as seen by Macro2 isKliknite U redu.
Makronaredba2 ne prikazuje vrijednost za varijablu x jer je varijabla x lokalna za Makronaredbu1. Prikazat će vam se sljedeća poruka:
x is still 10Kliknite U redu.
Pokretanje makronaredbe1.
Primit ćete poruke iste kao i u koracima od 3 do 6 jer čim se makronaredba1 prestala pokretati u 6. koraku, vrijednost varijable x je izgubljena. Zato kada ponovno pokrenete makronaredbu1 u sedmom koraku, prva poruka prikazuje vrijednost x kao nulu (inicijaliziranu vrijednost).
Statična ključna riječ
Ako je varijabla na razini procedure deklarirana pomoću ključne riječi Statički, varijabla zadržava svoju vrijednost sve dok se projekt ne vrati na zadane postavke. Dakle, ako imate statičnu varijablu, kada sljedeći put pozovete proceduru, statička varijabla će se inicijalizirati na svoju posljednju vrijednost.
Da biste vidjeli kako funkcionira ključna riječ Statički, slijedite ove korake:
1.
Change the code in Macro1 to:
Sub Macro1()
'set x as a procedure level variable
Static x As Integer
MsgBox "the initialized value of x is " & x
x = x + 10
MsgBox "x is " & x
End Sub
Pokretanje makronaredbe1.
Prikazat će vam se poruka:
the initialized value of x is 0Kliknite U redu i prikazat će vam se sljedeća poruka:
x is 10Kliknite U redu.
Pokrenite makronaredbu1 i prikazat će se sljedeća poruka:
the initialized value of x is 10Kliknite U redu i prikazat će vam se sljedeća poruka:
x is 20Kliknite U redu.
Vrijednosti koje se pojavljuju u porukama drugi su put drugačije jer je varijabla x deklarirana kao statična varijabla i zadržava svoju vrijednost nakon prvog pokretanja makronaredbe1.
NAPOMENA: Ako imate varijablu na razini modula, njezin je vijek trajanja jednak da se radi o statičkoj varijabli na razini procedure.
Da biste provjerili vijek trajanja varijable na razini modula, slijedite ove korake:
1.
Change the code in the module that contains Macro1 to the following:
Dim x As Integer 'create a module-level variable
Sub Macro1()
MsgBox "the initialized value of x is " & x
x = x + 10
MsgBox "x is " & x
End Sub
Pokrenite makronaredbu1 i prikazat će se sljedeća poruka:
the initialized value of x is 0Kliknite U redu i prikazat će se sljedeća poruka:
x is 10Kliknite U redu,
Pokrenite makronaredbu1 i prikazat će se sljedeća poruka:
the initialized value of x is 10Kliknite U redu.
Prikazat će vam se sljedeća poruka:
x is 20Kliknite U redu.
Vrijednosti koje se pojavljuju u porukama drugi su put drugačije jer je varijabla x deklarirana kao statična varijabla i zadržava svoju vrijednost nakon prvog pokretanja makronaredbe1 .
Ponovno pokretanje projekta radi ponovnog postavljanja varijabli
Ako želite ponovno postaviti vrijednost za statičku varijablu ili varijablu na razini modula, kliknite gumb Ponovno postavi na
Standard alatnu traku ili kliknite Ponovno postavi na izborniku Pokreni.
Ako to učinite za makronaredbu1 , a zatim ponovno pokrenete makronaredbu1, vrijednost varijable x inicijalizira se natrag na nulu i primate prvu poruku:
the initialized value of x is 0