Uvod
V tem članku je opisano, kako uporabljate Microsoft Excel v podpomonih v programu Microsoft VBA.
Več informacij
Spremenljivke v podpo procedurah
Zmogljiva funkcija programskih jezikov je zmogljivost shranjevanja nečesa v spremenljivki, tako da je vsebino spremenljivke mogoče uporabiti ali pa jo pozneje spreminjati v postopku. V tem dokumentu je obravnavana ta uporaba spremenljivk v Visual Basic:
-
Kako so spremenljivke deklarirane.
-
Postopki in projekti, ki lahko uporabijo spremenljivko.
-
Življenjska doba spremenljivke.
Declare a variable in a macro
Najpreprostejši način za napoved spremenljivke v makru je uporaba izjave Dim. Ta vrstica napove dve spremenljivki kot cela števila:
Dim x As Integer, y As Integer
Ko sta x in y določena kot cela števila, Visual Basic naj si ogleduje dovolj pomnilnika za spremenljivko celega števila (2 bajta za x in y) in da so informacije, ki so shranjene v x ali y, celo število med -32768 in 32767.
OPOMBA: Če z eno izjavo Dim deklarii vnesete več spremenljivk, morate določiti podatkovni tip za vsako spremenljivko. Če ne določite podatkovnega tipa za vsako spremenljivko, kot je v tem primeru Visual Basic koda, je le spremenljivka y nastavljena kot spremenljivka celega števila. Spremenljivka x bo vrsta različice:Dim x, y As Integer
Če želite dodatne informacije, glejte podatkovni tip Variant spodaj.
Če želite izvesti spremenljiv preskus, sledite tem korakom:
-
Shranite in zaprite vse odprte delovne zvezke ter odprite nov delovni zvezek.
-
Zaženite urejevalnik Visual Basic (pritisnite ALT+F11).
-
V meniju Vstavljanje kliknite Modul.
-
Vnesite to kodo: Sub Variable_Test() Dim x As Integer, y As Integer x = 10 y = 100 MsgBox "vrednost x je " & x & _ Chr(13) & "vrednost y je " & y End Sub
-
Zaženite Variable_Test makro. Prejmete to sporočilo: the value of x is 10the value of y is 100
-
Kliknite V redu.
-
V Variable_Test makro spremeni to vrstico: x = 10
-
v: x = "error"
-
Zaženite Variable_Test makro.
Prejeli boste napako med izvajanjem, ker »napaka« ni celo število in želite to vrednost niza dodeliti spremenljivki celega števila x.
Povzetek podatkovnega tipa
To so pogosti spremenljivi podatkovni tipi:
Podatkovni tip »Variant«
Če ne navedete podatkovnega tipa, ko deklariivijo spremenljivke ali pa sploh ne deklarivne spremenljivke, Visual Basic samodejno določi podatkovni tip variant za to spremenljivko. Spodaj so prednosti spremenljivk, ki so deklarirane kot ta podatkovni tip:
-
Spremenljivke lahko vsebujejo vrednosti niza, datuma, časa, logičnih vrednosti ali številskih vrednosti.
-
Spremenljivke lahko samodejno pretvorijo vrednosti, ki jih vsebujejo.
Slabost je, da spremenljivke različice zahtevajo vsaj 16 bajtov pomnilnika. 16 bajtov pomnilnika je lahko pomembnih v velikih postopkih ali v zapletenih modulih.
Če želite videti, kako to deluje Variable_Test makru, sledite tem korakom:Spremenite kodo v Variable_Test v:
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
Zaženite Variable_Test makro.
Napake ne boste prejeli, ker lahko kar koli dodelite spremenljivkam variant x in y.
OPOMBA: Izpustijo lahko tudi to vrstico in makro bo še vedno deloval kot spremenljivki x in y, ki bosta obravnavani kot podatkovna tipa Variant:Dim x, y
Obseg spremenljivke
Ko napovete spremenljivko, si jo lahko ali pa tudi ne vidijo drugi makri v istem modulu, v drugih modulih ali v drugih projektih. Ta razpoložljivost spremenljivke v modulih se imenuje obseg. Tri vrste obsega so na ravni procedure, na ravni zasebnega modula in na ravni javnega modula. Obseg je odvisen od tega, kako in kje napovete spremenljivko ali spremenljivke.
Obseg na ravni procedure
Spremenljivka z obsegom na ravni procedure ni viden zunaj postopka, kjer je deklarirana. Če nastavite vrednost spremenljivke, ki ima obseg na ravni procedure, drugi makri ne bodo videli vsebine te spremenljivke.
Če želite preveriti, da spremenljivka z obsegom na ravni procedure ni viden zunaj postopka, kjer je deklarirana, sledite tem korakom:-
Vstavite nov modul v projekt.
-
V ta modul vnesite oba od teh makrov:
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 -
Zaženite Makro1 in prikaže se to sporočilo: x, as seen by Macro1 is 10
-
Kliknite Vredu in prikaže se to sporočilo: x, as seen by Macro2 is
-
Kliknite V redu.
Makro2 ne prikaže vrednosti za spremenljivko x, ker je spremenljivka x lokalna za Macro1.
Obseg na zasebni in javni ravni modula
Spremenljivke lahko določite v odseku »Deklaracije« modula (na vrhu modula, nad vsemi pod procedure) in nastavite obseg spremenljivke z izjavo Public (Javno), izjavo Dim (Dim) ali izjavo Private (Zasebno). Če javno izjavo postavite pred spremenljivko, bo spremenljivka na voljo za vse makre v vseh modulih projekta. Če pred spremenljivko postavite izjavo Dim ali Private, je spremenljivka na voljo le za makre v modulu, kjer je deklarirana.
Če si želite ogledate razliko med izjavo Public (Javno) in izjavo Dim (Dim), upoštevajte te korake:-
Shranite in zaprite vse odprte delovne zvezke in nato odprite nov delovni zvezek.
-
Zaženite Visual Basic urejanje.
-
Vstavite modul v 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
-
V projekt lahko vstavite še en modul.
-
V ta modul vnesite to kodo:
Sub Macro2() x = x * 3 MsgBox x End Sub
-
Zaženite Macro_1a makro v prvem modulu.
-
S spremenljivko x, deklarirano kot »Public x As Integer«, imajo vsi trije makri v projektu dostop do vrednosti x. V prvem polju s sporočilom je prikazana vrednost 10. V drugem polju s sporočilom je prikazana vrednost 20 (x je pomnožen z 2 v Macro_1b). V tretjem oknu s sporočilom je prikazana vrednost 60 (ker je bila vrednost za x spremenjena na 20 v Macro_1b in je bila nato pomnožena s 3 v makru2).
-
Spremenite vrstico deklaracije v prvem modulu iz: Public x As Integer v: Dim x As Integer
-
Zaženite Macro_1a makro.
-
S spremenljivko x, deklarirano kot »Dim x As Integer«, imajo le makri v prvem modulu dostop do vrednosti x. V prvem polju s sporočilom je tako prikazana vrednost 10, v drugem polju s sporočilom pa je prikazana vrednost 20 (ker je x pomnožen z 2 v Macro_1b), v tretjem oknu s sporočilom pa je prikazana vrednost 0 (ker Makro2 ne vidi vrednosti x, neinicializirano vrednost nič pa makro 2).
-
Spremenite vrstico deklaracije v prvem modulu iz: Dim x As Integer da: Private x As Integer
-
Zaženite Macro_1a makro.
-
Ista polja s sporočili so prikazana z obsegom izjave Private, kot so bila v izjavi Dim. Spremenljivka x ima enak obseg, zaseben za modul, kjer je deklarirana.
OPOMBA: Če želite, da je obseg spremenljivke omejen na modul, v katerem je deklarirana, uporabite izjavo Privatestatement namesto izjave Dim. Oba dosežeta enak učinek, vendar je obseg jasnejši, ko preberete kodo, če uporabite izjavo Private.
Življenjska doba spremenljivke
Čas, med katerim spremenljivka ohrani svojo vrednost, je znan kot življenjska doba spremenljivke. Vrednost spremenljivke se lahko spremeni v času njene življenjske dobe, vendar ohrani vrednost. Ko spremenljivka izgubi obseg, nima več vrednosti.
Inicializacija vrednosti spremenljivke
Ko zaženete makro, se vse spremenljivke inicializirajo v vrednost. Številska spremenljivka je inicializirana na nič, spremenljiv niz dolžine se inicializira v niz ničelne dolžine (""), niz z nespremenljivo dolžino pa je zapolnjen s kodo ASCII 0. Spremenljivke Variant se inicializirajo v Prazno. Prazno spremenljivko predstavlja nič v številem kontekstu in niz ničelne dolžine ("") v kontekstu niza.
Spremenljivke na ravni procedure
Če imate spremenljivko, ki je deklarirana v makru z izjavo Dim, spremenljivka ohrani svojo vrednost, dokler se izvaja makro. Če ta makro pokliče druge makre, je vrednost spremenljivke ohranjena (ni na voljo za druge makre), dokler se izvajajo tudi ti drugi makri.
Če želite prikazati, kako delujejo spremenljivke na ravni procedure, upoštevajte te korake:-
Vstavite nov modul v projekt.
-
V ta modul vnesite oba od teh makrov: Sub Macro1() 'set x as a procedure level variable Dim x As Integer MsgBox "inicializirana vrednost x je " & x x = 10 MsgBox "x je " & x 'the next line runs Macro2 Makro2 MsgBox "x je še vedno " & x End Sub Sub Macro2() MsgBox "x, as seen by Macro2 is " & x End Sub
-
Zaženi makro1.
-
Prejmete to sporočilo: the initialized value of x is 0
-
Kliknite Vredu in prikaže se sporočilo: x is 10
-
Kliknite Vredu in prikaže se to sporočilo: x, as seen by Macro2 is
-
Kliknite V redu.
-
Makro2 ne prikaže vrednosti za spremenljivko x, ker je spremenljivka x lokalna za Macro1. Prikaže se to sporočilo: x is still 10
-
Kliknite V redu.
-
Zaženite makro1.
Prejmete ista sporočila, kot so opisana v korakih od 3. do 6. koraka, saj je bila vrednost spremenljivke x izgubljena, takoj ko se je Makro1 prenehal odzivati v 6. koraku. Ko v 7. koraku znova zaženite Macro1, prvo sporočilo prikaže vrednost x kot nič (inicializirana vrednost).
Statična ključna beseda
Če je spremenljivka na ravni procedure deklarirana s ključno besedo Statično, spremenljivka ohrani svojo vrednost, dokler se projekt ne ponastavi. Če imate torej statično spremenljivko, bo pri naslednjem priklicu procedure statična spremenljivka inicializirana na zadnjo vrednost.
Če želite videti, kako deluje statična ključna beseda, upoštevajte ta navodila:-
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
-
Zaženi makro1.
-
Prikaže se sporočilo: the initialized value of x is 0
-
Kliknite Vredu in prikaže se sporočilo:x is 10
-
Kliknite V redu.
-
Zaženite Makro1 in prikaže se to sporočilo: the initialized value of x is 10
-
Kliknite Vredu in prikaže se to sporočilo: x is 20
-
Kliknite V redu.
Vrednosti, ki se pojavijo v sporočilih, se drugič razlikujejo, ker je spremenljivka x deklarirana kot statična spremenljivka, spremenljivka pa ohrani svojo vrednost, ko prvič zaženete Macro1.
OPOMBA: Če imate spremenljivko na ravni modula, je njena življenjska doba enaka kot v primeru, da bi bila spremenljivka na ravni statične procedure. Če želite preveriti življenjsko dobo spremenljivke na ravni modula, upoštevajte te 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
-
Zaženite Makro1 in prikaže se to sporočilo: the initialized value of x is 0
-
Kliknite V redu in prikaže se to sporočilo: x is 10
-
Kliknite V redu,
-
Zaženite Makro1 in prikaže se to sporočilo: the initialized value of x is 10
-
Kliknite V redu.
-
Prejmete to sporočilo: x is 20
-
Kliknite V redu.
Vrednosti, ki se pojavijo v sporočilih, se drugič razlikujejo, ker je spremenljivka x deklarirana kot statična spremenljivka in ohrani svojo vrednost po prvem zagonu Makra1.
Ponastavitev projekta za ponastavitev spremenljivk
Če želite ponastaviti vrednost za statično spremenljivko ali spremenljivko na ravni modula, kliknite gumb Ponastavi
na Standardna orodna vrstica ali kliknite Ponastavi v meniju Zaženi. Če to naredite za projekt Macro1 in nato znova zaženite Makro1,se vrednost spremenljivke x inicializira nazaj na nič in prejmete prvo sporočilo:the initialized value of x is 0