Introducere
Acest articol descrie cum se utilizează variabilele Microsoft Excel subprochise în Microsoft Visual Basic pentru aplicații.
Mai multe informații
Variables in a sub procedure
O caracteristică puternică a limbajelor de programare este capacitatea de a stoca ceva într-o variabilă, astfel încât conținutul variabilei să poată fi utilizat sau poate fi modificat mai târziu în procedură. Acest document prezintă următoarea utilizare a variabilelor în Visual Basic:
-
Cum sunt declarate variabilele.
-
Procedurile și proiectele care pot utiliza variabila.
-
Durata de viață a unei variabile.
Declararea unei variabile într-o macrocomandă
Cea mai simplă modalitate de a declara o variabilă într-o macrocomandă este să utilizați ins extrasul de cont Dim. Următoarea linie declară două variabile, ca numere întregi:
Dim x As Integer, y As Integer
Cu x și y specificate ca numere întregi, spuneți lui Visual Basic să adăute suficientă memorie pentru o variabilă întreagă (2 byți fiecare pentru x și y) și că informațiile stocate în x sau y sunt un număr întreg între -32768 și 32767.
NOTĂ: Dacă declarați mai multe variabile, utilizând o singură ins foloseștere estompare, trebuie să specificați tipul de date pentru fiecare variabilă. Dacă nu specificați tipul de date pentru fiecare variabilă, la fel ca în următorul cod Visual Basic, doar variabila y este configurată ca variabilă număr întreg. Variabila x va fi un tip de variant:Dim x, y As Integer
Pentru informații suplimentare, consultați tipul de date Variant de mai jos.
Pentru a efectua un test variabil, urmați acești pași:
-
Salvați și închideți toate registrele de lucru deschise, apoi deschideți un registru de lucru nou.
-
Porniți editorul Visual Basic (apăsați ALT+F11).
-
În meniul Inserare, faceți clic pe Modul.
-
Tastați următorul cod: Sub Variable_Test() Dim x Ca număr întreg, y Ca număr întreg x = 10 y = 100 CasetăMsbox "valoarea lui x este " & x & _ Chr(13) & "valoarea lui y este " & y End Sub
-
Rulați macrocomanda Variable_Test proiect. Veți primi următorul mesaj:the value of x is 10the value of y is 100
-
Faceți clic pe OK.
-
În macrocomanda Variable_Test, modificați următoarea linie: x = 10
-
la: x = "error"
-
Rulați macrocomanda Variable_Test proiect.
Veți primi o eroare la momentul rulămei, deoarece "eroare" nu este un întreg și se încearcă atribuirea acestei valori de șir variabilei număr întreg x.
Rezumatul tipului de date
Acestea sunt tipurile de date variabile comune:
tip de date Variant
Dacă nu specificați un tip de date atunci când declarați o variabilă sau nu declarați o variabilă, Visual Basic specifică automat tipul de date variant pentru această variabilă. Următoarele sunt avantajele variabilelor care sunt declarate ca acest tip de date:
-
Variabilele pot conține valori șir, dată, oră, boolean sau numerice.
-
Variabilele pot converti automat valorile pe care le conțin.
Dezavantajul este că variabilele variant necesită cel puțin 16 byți de memorie. 16 byți de memorie pot fi semnificativi în procedurile mari sau în modulele complexe.
Pentru a vedea cum funcționează aceasta în macrocomanda Variable_Test macrocomenzi, urmați acești pași:Modificați codul din macrocomanda Variable_Test astfel:
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
Rulați macrocomanda Variable_Test proiect.
Nu veți primi o eroare, deoarece este posibil să atribuiți nimic variabilelor variant x și y.
NOTĂ: Puteți, de asemenea, să nu includeți următoarea linie și macrocomanda va funcționa în continuare, deoarece variabilele x și y sunt tratate ca tipuri de date Variant:Dim x, y
Domeniul unei variabile
Când declarați o variabilă, aceasta poate fi văzută sau nu de alte macrocomenzi din același modul, din alte module sau din alte proiecte. Această disponibilitate a unei variabile în module este denumită domeniu. Cele trei tipuri de domeniu sunt la nivel de procedură, la nivel de modul privat și la nivel de modul public. Domeniul depinde de cum și unde declarați variabilele sau variabilele.
Domeniul la nivel de procedură
O variabilă cu domeniu de aplicare la nivel de procedură nu este văzută în afara procedurii unde este declarată. Dacă setați valoarea unei variabile cu domeniu la nivel de procedură, conținutul variabilei nu va fi văzut de alte macrocomenzi.
Pentru a verifica dacă o variabilă cu domeniul la nivel de procedură nu este văzută în afara procedurii unde este declarată, urmați acești pași:-
Inserați un modul nou în proiect.
-
Tastați ambele macrocomenzi următoare în acest modul:
Sub Macrocomandă1() Dim x Ca număr întreg x = 10 Casetă msgBox "x, așa cum este văzută de Macrocomandă1 este " & x 'următoarea linie rulează Macrocomanda2 Macro2 End Sub Macro2() Casetă MsgBox "x, așa cum este văzută de Macrocomandă2 este " & x End Sub -
Rulați Macrocomanda1 și veți primi următorul mesaj:x, as seen by Macro1 is 10
-
Faceți clic pe OKși veți primi următorul mesaj: x, as seen by Macro2 is
-
Faceți clic pe OK.
Macrocomanda2 nu afișează o valoare pentru variabila x, deoarece variabila x este locală pentru Macrocomandă1.
Domeniul de aplicare la nivel de modul privat și public
Aveți posibilitatea să definiți variabilele în secțiunea de declarații a unui modul (în partea de sus a unui modul, deasupra tuturor sub procedurilor) și să setați domeniul variabilei utilizând ins declarația Public, ins extrasul de cont Dim sau ins extrasul de cont Privat. Dacă puneți declarația Publică în fața variabilei, variabila va fi disponibilă pentru toate macrocomenzile din toate modulele proiectului. Dacă puneți fie ins declarația Dim, fie declarația Privat în fața variabilei, variabila este disponibilă doar pentru macrocomenzile din modul în care este declarată.
Pentru a vedea diferența dintre ins declarația Public și ins extrasul de cont Estompare, urmați acești pași:-
Salvați și închideți toate registrele de lucru deschise, apoi deschideți un registru de lucru nou.
-
Porniți editorul Visual Basic editare.
-
Inserați un modul în proiect.
-
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
-
Inserați un alt modul în proiect.
-
Tastați următorul cod în acest modul:
Sub Macro2() x = x * 3 CasetăMsg x End Sub
-
Rularea Macro_1a macrocomenzi în primul modul.
-
Cu variabila x declarată ca "Public x ca număr întreg", toate cele trei macrocomenzi din proiect au acces la valoarea x. Caseta pentru primul mesaj afișează valoarea 10. A doua casetă mesaj afișează o valoare 20 (deoarece x este înmulțit cu 2 în Macro_1b). A treia casetă mesaj afișează o valoare 60 (deoarece valoarea lui x a fost modificată la 20 în Macro_1b apoi a fost înmulțită cu 3 în Macrocomandă2).
-
Schimbarea liniei declarației în primul modul din: Public x As Integer la: Dim x As Integer
-
Rulați macrocomanda Macro_1a proiect.
-
Cu variabila x declarată ca "Dim x Ca număr întreg", doar macrocomenzile din primul modul au acces la valoarea x. Așadar, prima casetă de mesaj afișează o valoare 10, a doua casetă de mesaj afișează o valoare 20 (deoarece x este înmulțit cu 2 în Macro_1b), iar a treia casetă de mesaj afișează valoarea 0 (deoarece Macro2 nu vede valoarea x, iar valoarea neinitițială a zero este utilizată de Macrocomanda 2).
-
Schimbarea liniei declarației în primul modul din: Dim x As Integer la: Private x As Integer
-
Rulați macrocomanda Macro_1a proiect.
-
Aceleași casete de mesaj se afișează utilizând domeniul Declarație privată, ca și cum ar utiliza ins declarația Estompare. Variabila x are același domeniu, privat pentru modulul unde este declarat.
NOTĂ: Dacă doriți ca domeniul variabilei să fie limitat la modulul în care este declarată, utilizați ins declarația Privatestatement în locul ins extrasului de cont Dim. Ambele obțin același efect, dar domeniul este mai clar atunci când citiți codul dacă utilizați declarația Privat.
Durata de viață a unei variabile
Timpul în care o variabilă își păstrează valoarea este cunoscută ca durata sa de viață. Valoarea unei variabile se poate modifica pe durata sa de viață, dar aceasta va păstra o valoare. De asemenea, atunci când o variabilă pierde domeniul, aceasta nu mai are o valoare.
Inițializarea valorii unei variabile
Când rulați o macrocomandă, toate variabilele sunt inițializate într-o valoare. O variabilă numerică este inițializată la zero, un șir de lungime variabilă este inițializat într-un șir de lungime zero ("") și un șir de lungime fixă este umplut cu codul ASCII 0. Variabilele variant sunt inițializate în Gol. O variabilă goală este reprezentată de un zero într-un context numeric și un șir de lungime zero ("") într-un context de șir.
Variabile la nivel de procedură
Dacă aveți o variabilă care este declarată într-o macrocomandă utilizând ins declarația Dim, variabila își păstrează valoarea cât timp rulează macrocomanda. Dacă această macrocomandă apelează alte macrocomenzi, valoarea variabilei este păstrată (însă nu este disponibilă pentru celelalte macrocomenzi) atât timp cât aceste macrocomenzi rulează, de asemenea.
Pentru a demonstra cum funcționează variabilele la nivel de procedură, urmați acești pași:-
Inserați un modul nou în proiect.
-
Tastați ambele macrocomenzi următoare în acest modul: Sub Macro1() 'set x ca variabilă a nivelului procedurii Dim x As Integer CasetăMsg "valoarea inițializată a lui x este " & x x = 10 Casetă MsgBox "x este " & x 'următoarea linie rulează Macrocomandă2 Macrocomanda2 Casetă MsgBox "x este încă " & x End Sub Sub Macro2() Caseta MsgBox "x, așa cum este văzut de Macro2 este " & x End Sub
-
Rulați Macrocomanda1.
-
Primiți următorul mesaj: the initialized value of x is 0
-
Faceți clic pe OKși veți primi mesajul: x is 10
-
Faceți clic pe OKși veți primi următorul mesaj: x, as seen by Macro2 is
-
Faceți clic pe OK.
-
Macrocomanda2 nu afișează o valoare pentru variabila x, deoarece variabila x este locală pentru Macrocomandă1. Obțineți următorul mesaj: x is still 10
-
Faceți clic pe OK.
-
Rulați Macrocomanda1.
Primiți aceleași mesaje descrise în pașii 3-6, deoarece, imediat ce Macrocomanda1 nu mai rulează în Pasul 6, valoarea variabilei x s-a pierdut. Prin urmare, atunci când executați din nou Macrocomanda1 la Pasul 7, primul mesaj arată valoarea x ca zero (valoarea inițializată).
Cuvânt cheie static
Dacă o variabilă la nivel de procedură este declarată prin utilizarea cuvântului cheie Static, variabila își păstrează valoarea până când proiectul este resetat. Prin urmare, dacă aveți o variabilă statică, data viitoare când apelați procedura, variabila statică este inițializată la ultima sa valoare.
Pentru a vedea cum funcționează cuvântul cheie Static, urmați acești pași:-
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
-
Rulați Macrocomanda1.
-
Veți primi mesajul:the initialized value of x is 0
-
Faceți clic pe OKși veți primi mesajul: x is 10
-
Faceți clic pe OK.
-
Rulați Macrocomanda1 și obțineți următorul mesaj: the initialized value of x is 10
-
Faceți clic pe OKși veți primi următorul mesaj: x is 20
-
Faceți clic pe OK.
Valorile care apar în mesaje sunt diferite a doua oară, deoarece variabila x este declarată ca variabilă statică, iar variabila își păstrează valoarea după ce rulați Macrocomanda1 prima dată.
NOTĂ: Dacă aveți o variabilă la nivel de modul, durata sa de viață este ca și cum ar fi o variabilă la nivel de procedură statică. Pentru a verifica durata de viață a unei variabile la nivel de modul, urmați acești pași:-
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
-
Rulați Macrocomanda1 și veți primi următorul the initialized value of x is 0
mesaj: -
Faceți clic pe OK și veți primi următorul mesaj: x is 10
-
Faceți clic pe OK,
-
Rulați Macrocomanda1 și veți primi acest mesaj: the initialized value of x is 10
-
Faceți clic pe OK.
-
Primiți următorul mesaj: x is 20
-
Faceți clic pe OK.
Valorile care apar în mesaje sunt diferite a doua oară, deoarece variabila x este declarată ca variabilă statică și își păstrează valoarea după ce rulați Macrocomanda1 prima dată.
Reinițializarea unui proiect pentru a reseta variabilele
Dacă doriți să resetați valoarea pentru o variabilă statică sau pentru o variabilă la nivel de modul, faceți clic pe butonul Resetare din
Bara de instrumente Standard sau faceți clic pe Reinițializare în meniul Executare. Dacă faceți acest lucru pentru proiectul macrocomandă1 și apoi executați din nou Macrocomanda1,valoarea variabilei x este inițializată înapoi la zero și primiți primul mesaj:the initialized value of x is 0