Uvod
U ovom se članku opisuje kako koristiti varijable u Microsoft Excel pododjeljcima u aplikaciji Microsoft Visual Basic za aplikacije.
Dodatne informacije
Varijable u pod procedure
Snažna značajka programskih jezika mogućnost je pohrane u varijablu da bi se sadržaj varijable mogao koristiti ili kasnije promijeniti u postupku. U ovom se dokumentu razmatra sljedeće korištenje varijabli u Visual Basic:
-
Kako su varijable deklarirane.
-
Postupci i projekti koji mogu koristiti varijablu.
-
Vijek trajanja varijable.
Deklarirati varijablu u makronaredbi
Varijablu u makronaredbi najjednostavnije je deklarirati tako da koristite izjavu Dim. Sljedeći redak izjavljuje dvije varijable kao cijeli broj:
Dim x As Integer, y As Integer
Ako su x i y navedeni kao cijeli brojevi, Visual Basic govorite da za varijablu cijelog broja (2 bajta svaki za x i y) postavi dovoljno memorije i da su podaci pohranjeni u x ili y cijeli broj između -32768 i 32767.
NAPOMENA: Ako deklarivate više varijabli pomoću jedne dim izjave, morate navesti vrstu podataka za svaku varijablu.
Ako ne odredite vrstu podataka za svaku varijablu, kao u sljedećem Visual Basic, kao varijabla y postavlja se kao varijabla cijeli broj. Varijabla x bit će vrsta varijante:
Dim x, y As Integer
Dodatne informacije potražite u odjeljku Vrsta podataka Variant u nastavku.
Da biste izvršili test varijable, slijedite ove korake:
-
Spremite i zatvorite sve otvorene radne knjige, a zatim otvorite novu radnu knjigu.
-
Pokrenite uređivač Visual Basic (pritisnite ALT + F11).
-
Na izborniku Umetanje kliknite Modul.
-
Upišite sljedeći kod:
Sub Variable_Test()
Dim x As Integer, y As Integer
x = 10
y = 100
MsgBox "vrijednost x je " & x & _
Chr(13) & "vrijednost y je " & y
End Sub -
Pokrenite Variable_Test makronaredbu. Primit ćete sljedeću poruku:
the value of x is 10
the value of y is 100 -
Kliknite U redu.
-
U makronaredbi Variable_Test promijenite sljedeći redak:
x = 10 -
na:
x = "error" -
Pokrenite Variable_Test makronaredbu.
Primit ćete pogrešku s pokretanjem jer "pogreška" nije cijeli broj i pokušavate dodijeliti tu vrijednost niza varijabli cijeli broj x.
Sažetak vrste podataka
To su uobičajene vrste podataka varijabli:
vrsta podatka Variant
Ako ne navedete vrstu podataka kada deklarite varijablu ili uopće ne deklarite varijablu, Visual Basic automatski određuje vrstu podataka varijante za tu varijablu. Sljedeće su prednosti varijabli koje su deklarirane kao ova vrsta podataka:
-
Varijable mogu sadržavati nizove, datum, vrijeme, Booleove ili numeričke vrijednosti.
-
Varijable mogu automatski pretvoriti vrijednosti koje sadrže.
Nedostatak je u tome što varijable varijante zahtijevaju najmanje 16 bajta memorije. 16 bajta memorije može biti značajno u velikim postupcima ili složenim modulima.
Da biste vidjeli kako to funkcionira u 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 Variable_Test makronaredbu.
Nećete primiti pogrešku jer možete dodijeliti bilo što varijablama varijanti x i y.
NAPOMENA: Možete i ostaviti sljedeći redak, a makronaredba će i dalje funkcionirati kao varijable x i y tretiraju se kao vrste podataka Variant:
Dim x, y
Opseg varijable
Kada deklarite varijablu, druge makronaredbe u istom modulu, drugim modulima ili drugim projektima mogu je vidjeti ili ne mogu vidjeti. Ta se dostupnost varijable u modulima naziva opsegom. Tri vrste opsega su razina procedure, privatna razina modula i javna razina modula. Opseg ovisi o tome kako i gdje deklarirati varijable ili varijable.
Opseg na razini postupka
Varijabla s opsegom na razini postupka ne vidi se izvan postupka u kojem je deklarirana. Ako postavite vrijednost varijable s opsegom razine procedure, ostale makronaredbe neće vidjeti sadržaj te varijable.
Da biste provjerili ne vidi li se varijabla s opsegom na razini postupka izvan postupka u kojem je deklarirana, slijedite ove korake:
-
Umetnite novi modul u projekt.
-
U ovaj modul upišite obje sljedeće makronaredbe:
Sub Macro1() Dim x As Integer x = 10 MsgBox "x, as seen by Macro1 is " & x 'the next line runs Macro2 Macro2 End Sub Sub Macro2() MsgBox "x, as seen by Macro2 is " & x End Sub -
Pokrenite Makronaredbu1 i vidjet ćete sljedeću poruku:
x, as seen by Macro1 is 10 -
Kliknite Uredu , a zatim ćete dobiti sljedeću poruku:
x, as seen by Macro2 is -
Kliknite U redu.
Makronaredba2 ne prikazuje vrijednost varijable x jer je varijabla x lokalna na Makronaredbu1.
Opseg privatnog i javnog modula
Varijable možete definirati u odjeljku deklaracija modula (pri vrhu modula, iznad svih pod procedura) i postaviti opseg varijable pomoću javne izjave, izjave Dim ili izjave Privatno. Ako javnu izjavu stavite ispred varijable, varijabla će biti dostupna svim makronaredbama u svim modulima u projektu. Ako ispred varijable stavite dim ili privatnu izjavu, varijabla je dostupna samo makronaredbama u modulu u kojem se deklarirana.
Da biste vidjeli razliku između javne izjave i izjave Zatamnjenje, slijedite ove korake:
-
Spremite i zatvorite sve otvorene radne knjige, a zatim otvorite novu radnu knjigu.
-
Pokrenite uređivač Visual Basic.
-
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 drugi modul u projekt.
-
U ovaj modul upišite sljedeći kod:
Sub Macro2() x = x * 3
MsgBox x
End Sub -
Pokrenite Macro_1a makronaredbu u prvom modulu.
-
Uz varijablu x deklariranu kao "Javni x kao cijeli broj", sve tri makronaredbe u projektu imaju pristup vrijednosti x. U okviru prve poruke prikazuje se vrijednost 10. U drugom se okviru s porukom prikazuje vrijednost 20 (jer se x množi s 2 u Macro_1b). U okviru treće poruke prikazuje se 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 Integer
na:
Dim x As Integer -
Pokrenite Macro_1a makronaredbu.
-
Uz varijablu x deklariranu kao "Dim x Kao cijeli broj", samo makronaredbe u prvom modulu imaju pristup vrijednosti x. U okviru prve poruke prikazuje se vrijednost 10, u drugom se okviru poruke prikazuje vrijednost 20 (jer se x množi s 2 u Macro_1b), a u okviru treće poruke prikazuje se vrijednost 0 (jer Makronaredba2 ne vidi vrijednost x, a neinicijaliziranu vrijednost nule koristi makronaredba 2).
-
Promijenite redak deklaracije u prvom modulu iz:
Dim x As Integer
na sljedeće:
Private x As Integer -
Pokrenite Macro_1a makronaredbu.
-
Isti se okviri poruka prikazuju pomoću opsega privatne izjave kao i naredba Zatamnjenje. Varijabla x ima isti opseg, privatno za modul u kojem je deklarirana.
NAPOMENA: Ako želite da opseg varijable bude ograničen na modul u kojem je deklarirana, koristite Privatestatement umjesto izjave Dim. Oba efekta postižu isti učinak, ali je opseg jasniji kada pročitate kod ako koristite privatnu izjavu.
Vijek trajanja varijable
Vrijeme tijekom kojeg varijabla zadržava svoju vrijednost naziva se vijekom trajanja. Vrijednost varijable može se promijeniti tijekom trajanja, ali će zadržati vrijednost. Osim toga, kada varijabla izgubi opseg, više nema vrijednost.
Inicijalizacija vrijednosti varijable
Kada pokrenete makronaredbu, sve varijable se inicijaliziraju na vrijednost. Numerička varijabla inicijalizira se na nulu, niz promjenjive duljine inicijalizira se na niz nulte duljine ("), a niz fiksne duljine ispunjen je ASCII kodom 0. Varijable varijanti inicijaliziraju se na Prazno. Prazna varijabla predstavljena je nulom u numeričkom kontekstu i nizom nulte duljine ("") u kontekstu niza.
Varijable razine procedure
Ako imate varijablu koja je deklarirana u makronaredbi pomoću izjave Dim, varijabla zadržava njezinu vrijednost sve dok je makronaredba pokrenuta. Ako makronaredba poziva druge makronaredbe, vrijednost varijable zadržava se (iako nije dostupna drugim makronaredbama) sve dok se te druge makronaredbe izvode.
Da biste pokazali kako funkcioniraju varijable na razini postupka, slijedite ove korake:
-
Umetnite novi modul u projekt.
-
U ovaj 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
'the next line runs Macro2
Makronaredba2
MsgBox "x je i dalje " & x
End Sub
Pod macro2()
MsgBox "x, kao što je vidio Macro2 je " & x
End Sub -
Pokreni makronaredbu 1.
-
Primit ćete sljedeću poruku:
the initialized value of x is 0 -
Kliknite Uredu , a zatim ćete dobiti poruku:
x is 10 -
Kliknite Uredu , a zatim ćete dobiti sljedeću poruku:
x, as seen by Macro2 is -
Kliknite U redu.
-
Makronaredba2 ne prikazuje vrijednost varijable x jer je varijabla x lokalna na Makronaredbu1. Prikazuje se sljedeća poruka:
x is still 10 -
Kliknite U redu.
-
Pokreni makronaredbu 1.
Primate iste poruke opisane u koracima od 3. do 6. jer čim je Makronaredba1 prestala funkcionirati u šestom koraku, vrijednost varijable x je izgubljena. Stoga, kada ponovno pokrenite Makronaredbu1 u 7. koraku, prva poruka prikazuje vrijednost x kao nulu (inicijalizirana vrijednost).
Statična ključna riječ
Ako se varijabla na razini postupka deklarira pomoću statičke ključne riječi, varijabla zadržava njezinu vrijednost dok se projekt ne vrati na izvorno. Stoga, ako imate statičnu varijablu, kada sljedeći put nazovete proceduru, statička varijabla inicijalizira se na zadnju vrijednost.
Da biste vidjeli kako funkcionira statična ključna riječ, slijedite ove korake:
-
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
-
Pokreni makronaredbu 1.
-
Prikazuje se poruka:
the initialized value of x is 0 -
Kliknite Uredu , a zatim ćete dobiti poruku:
x is 10 -
Kliknite U redu.
-
Pokrenite makronaredbu1 i prikazuje vam se sljedeća poruka:
the initialized value of x is 10 -
Kliknite Uredu , a zatim ćete dobiti sljedeću poruku:
x is 20 -
Kliknite U redu.
Vrijednosti koje se pojavljuju u porukama razlikuju se po drugi put jer je varijabla x deklarirana kao statična varijabla, a varijabla zadržava njezinu vrijednost kada prvi put pokrenete Macro1.
NAPOMENA: Ako imate varijablu razine modula, njegov je vijek trajanja jednak statičnoj varijabli razine procedure.
Da biste provjerili vijek trajanja varijable razine modula, slijedite ove korake:
-
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 vidjet ćete sljedeću poruku:
the initialized value of x is 0 -
Kliknite U redu, a zatim ćete dobiti sljedeću poruku:
x is 10 -
Kliknite U redu,
-
Pokrenite makronaredbu 1 i vidjet ćete ovu poruku:
the initialized value of x is 10 -
Kliknite U redu.
-
Primit ćete sljedeću poruku:
x is 20 -
Kliknite U redu.
Vrijednosti koje se pojavljuju u porukama razlikuju se drugi put jer je varijabla x deklarirana kao statična varijabla i zadržava njezinu vrijednost nakon prvog pokretanje makronaredbe Macro1.
Ponovno postavljanje projekta na izvorne varijable
Ako želite vratiti vrijednost za statičnu varijablu ili varijablu razine modula, kliknite gumb Vrati izvorno na
Standardna alatna traka ili na izborniku Pokreni kliknite Vrati izvorno.
Ako to učinite za projekt Macro1, a zatim ponovno pokrenite makronaredbu Macro1,vrijednost varijable x inicijalizira se natrag na nulu i primit ćete prvu poruku:
the initialized value of x is 0