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:

  1. Salvați și închideți toate registrele de lucru deschise, apoi deschideți un registru de lucru nou.

  2. Porniți editorul Visual Basic (apăsați ALT+F11).

  3. În meniul Inserare, faceți clic pe Modul.

  4. 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

  5. Rulați macrocomanda Variable_Test proiect. Veți primi următorul mesaj:the value of x is 10the value of y is 100

  6. Faceți clic pe OK.

  7. În macrocomanda Variable_Test, modificați următoarea linie: x = 10

  8. la: x = "error"

  9. 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:

tipuri 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:

  1. Inserați un modul nou în proiect.

  2. 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

  3. Rulați Macrocomanda1 și veți primi următorul mesaj:x, as seen by Macro1 is 10

  4. Faceți clic pe OKși veți primi următorul mesaj: x, as seen by Macro2 is

  5. 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:

  1. Salvați și închideți toate registrele de lucru deschise, apoi deschideți un registru de lucru nou.

  2. Porniți editorul Visual Basic editare.

  3. Inserați un modul în proiect.

  4. 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
  5. Inserați un alt modul în proiect.

  6. Tastați următorul cod în acest modul:

    Sub Macro2()     x = x * 3     CasetăMsg x End Sub

  7. Rularea Macro_1a macrocomenzi în primul modul.

  8. 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).

  9. Schimbarea liniei declarației în primul modul din:    Public x As Integer la:    Dim x As Integer

  10. Rulați macrocomanda Macro_1a proiect.

  11. 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).

  12. Schimbarea liniei declarației în primul modul din:   Dim x As Integer la:     Private x As Integer

  13. Rulați macrocomanda Macro_1a proiect.

  14. 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:

  1. Inserați un modul nou în proiect.

  2. 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

  3. Rulați Macrocomanda1.

  4. Primiți următorul mesaj:     the initialized value of x is 0

  5. Faceți clic pe OKși veți primi mesajul:  x is 10

  6. Faceți clic pe OKși veți primi următorul mesaj: x, as seen by Macro2 is

  7. Faceți clic pe OK.

  8. 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

  9. Faceți clic pe OK.

  10. 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:

  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
  2. Rulați Macrocomanda1.

  3. Veți primi mesajul:the initialized value of x is 0

  4. Faceți clic pe OKși veți primi mesajul: x is 10

  5. Faceți clic pe OK.

  6. Rulați Macrocomanda1 și obțineți următorul mesaj: the initialized value of x is 10

  7. Faceți clic pe OKși veți primi următorul mesaj: x is 20

  8. 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:

  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
  2. Rulați Macrocomanda1 și veți primi următorul mesaj: the initialized value of x is 0

  3. Faceți clic pe OK și veți primi următorul mesaj: x is 10

  4. Faceți clic pe OK,

  5. Rulați Macrocomanda1 și veți primi acest mesaj: the initialized value of x is 10

  6. Faceți clic pe OK.

  7. Primiți următorul mesaj: x is 20

  8. 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

Aveți nevoie de ajutor suplimentar?

Doriți mai multe opțiuni?

Explorați avantajele abonamentului, navigați prin cursurile de instruire, aflați cum să vă securizați dispozitivul și multe altele.

Comunitățile vă ajută să adresați întrebări și să răspundeți la întrebări, să oferiți feedback și să primiți feedback de la experți cu cunoștințe bogate.