Variabile și constante în VBA

În VBA, ca în orice alt limbaj de programare, variabilele și constantele sunt folosite pentru a stoca orice valoare. După cum sugerează și numele, variabilele se pot schimba, în timp ce constantele stochează valori fixe.

De exemplu, o constantă Pi stochează valoarea 3,14159265... Numărul „Pi” nu se va schimba în timpul execuției programului, dar este totuși mai convenabil să stocați o astfel de valoare ca constantă.

În același timp, putem folosi variabila sVAT_Rate pentru a stoca cota de TVA la bunurile achiziționate. Valoare variabilă sVAT_Rate poate varia in functie de produsul achizitionat.

Tipuri de date

Toate variabilele și constantele sunt de un anumit tip de date. Tabelul de mai jos listează tipurile de date utilizate în VBA cu o descriere și un interval de valori posibile:

Tip de date MărimeaDescriereGama de valori
ByteBytes 1Numere întregi pozitive; adesea folosit pentru date binarede la 0 la 255
booleanBytes 2Poate fi adevărat sau falsAdevărat sau fals
ÎntregBytes 2numere întregi (fără parte fracțională)de la -32 la +768
LungBytes 4numere întregi mari (fără parte fracțională)от -2 147 483 648 до +2 147 483 647
singurBytes 4Număr cu virgulă mobilă de precizie unicăde la -3.4e38 la +3.4e38
dubluBytes 8Număr cu virgulă mobilă cu precizie dublăde la -1.8e308 la +1.8e308
MonedăBytes 8Număr în virgulă mobilă, cu un număr fix de zecimaleот -922 337 203 685 477.5808 до +922 337 203 685 477.5807
DataBytes 8Data și ora – Datele de tip Data sunt reprezentate de un număr în virgulă mobilă. Partea întreagă a acestui număr exprimă data, iar partea fracțională exprimă ora.de la 1 ianuarie 100 până la 31 decembrie 9999
ObiectBytes 4Referință la obiectOrice referință la obiect
Şirse schimbaSet de caractere. Tipul String poate fi de lungime fixă ​​sau variabilă. Folosit mai frecvent cu lungime variabilăLungime fixă ​​– până la aproximativ 65 de caractere. Lungime variabilă – până la aproximativ 500 de miliarde de caractere
Variantăse schimbaPoate conține o dată, un float sau un șir de caractere. Acest tip este utilizat în cazurile în care nu se știe dinainte ce tip de date vor fi introduse.Număr – dublu, șir – șir

Evident, folosind tabelul de mai sus și alegând tipul de date potrivit, puteți folosi memoria mai economic (de exemplu, alegeți tipul de date Întreg in schimb Lung or singur in schimb dublu). Cu toate acestea, atunci când utilizați tipuri de date mai compacte, trebuie să aveți grijă ca codul dvs. să nu încerce să încadreze valori disproporționat de mari în ele.

Declararea variabilelor și constantelor

Nota traducătorului: Vorbind despre variabile în VBA, merită menționat încă un punct foarte important. Dacă declarăm o variabilă, dar nu îi atribuim nicio valoare, atunci aceasta este inițializată cu o valoare implicită:

• șirurile de text sunt inițializate cu șiruri goale;

• numere — valoarea 0;

• variabile de tip boolean - Fals;

• date – 30 decembrie 1899.

Înainte de a putea fi utilizată o variabilă sau o constantă, aceasta trebuie declarată. Pentru a face acest lucru, adăugați următoarea linie simplă de cod la macrocomandă:

Dim Имя_Переменной As Тип_Данных

În linia de cod de mai sus Numele_variabilă este numele variabilei care va fi folosită în cod și Data_Type este unul dintre tipurile de date din tabelul prezentat puțin mai devreme în acest articol. De exemplu:

Dim sVAT_Rate As Single Dim i As Integer

Constantele sunt declarate în mod similar, dar atunci când se declară constante, valoarea lor trebuie să fie imediat indicată. De exemplu, așa:

Const iMaxCount = 5000 Const iMaxScore = 100

Nu este necesar să declarați variabile în Excel. În mod implicit, toate variabilele introduse, dar nedeclarate în Excel, vor avea tipul Variantă și va putea accepta atât valori numerice, cât și text.

Astfel, programatorul poate folosi oricand noua variabila (chiar daca nu a fost declarata), iar Excel o va trata ca pe o variabila de tip Variantă. Cu toate acestea, există mai multe motive pentru care acest lucru nu ar trebui făcut:

  1. Utilizarea memoriei și viteza de calcul. Dacă nu declarați o variabilă cu o indicație a tipului de date, atunci implicit va fi setată la tipul Variantă. Acest tip de date utilizează mai multă memorie decât alte tipuri de date. Câțiva octeți suplimentari pe variabilă ar putea să nu sune prea mult, dar, în practică, programele pot avea mii de variabile (mai ales atunci când lucrează cu matrice). Prin urmare, memoria suplimentară folosită de variabile precum Variantă, comparativ cu variabilele de tip Întreg or singur, poate ajunge la o cantitate semnificativă. În plus, operațiuni cu variabile de tip Variantă sunt executate mult mai lent decât cu variabile de alte tipuri, respectiv, o mie de variabile de tip în plus Variantă poate încetini considerabil calculele.
  2. Prevenirea greșelilor de scriere în numele variabilelor. Dacă toate variabilele sunt declarate, atunci instrucțiunea VBA poate fi utilizată - Opțiune explicită (vom vorbi despre asta mai târziu) pentru a identifica toate variabilele nedeclarate. Acest lucru elimină apariția unei erori în program ca urmare a unui nume de variabilă scris incorect. De exemplu, folosind o variabilă numită sVAT_Rate, puteți face o greșeală de tipar și, atribuind o valoare acestei variabile, scrieți: „VATRate = 0,175”. Este de așteptat ca de acum înainte, variabila sVAT_Rate ar trebui să conțină valoarea 0,175 – dar bineînțeles că nu are. Dacă modul de declarare obligatorie a tuturor variabilelor utilizate este activat, atunci compilatorul VBA va indica imediat o eroare, deoarece nu va găsi variabila Cota TVA dintre cele anunţate.
  3. Evidențierea valorilor care nu se potrivesc cu tipul declarat al unei variabile. Dacă declarați o variabilă de un anumit tip și încercați să îi atribuiți date de alt tip, veți obține o eroare, care, dacă nu este corectată, poate provoca blocarea programului. La prima vedere, acesta poate părea un motiv bun pentru a nu declara variabile, dar de fapt, decât înainte, se dovedește că una dintre variabile a primit datele greșite pe care ar fi trebuit să le primească – cu atât mai bine! În caz contrar, dacă programul continuă să ruleze, rezultatele pot fi incorecte și neașteptate și va fi mult mai dificil de găsit cauza erorilor. De asemenea, este posibil ca macro-ul să fie executat „cu succes”. Ca urmare, eroarea va trece neobservată și lucrul va continua cu date incorecte!

În acest sens, este de dorit să se detecteze un tip de date incorect și să se corecteze astfel de erori în cod cât mai curând posibil. Din aceste motive, se recomandă să declarați toate variabilele atunci când scrieți o macrocomandă VBA.

Opțiune explicită

Operator Opțiune explicită face ca toate variabilele care vor fi utilizate în codul VBA să fie declarate și semnalează toate variabilele nedeclarate ca erori în timpul compilării (înainte de a începe execuția codului). Aplicarea acestui operator nu este dificilă - doar scrieți această linie în partea de sus a fișierului VBA:

Option Explicit

Dacă doriți să introduceți întotdeauna Opțiune explicită în partea de sus a fiecărui modul VBA nou creat, acest lucru se poate face automat. Pentru a face acest lucru, trebuie să activați opțiunea Necesită declarație variabilă în setările editorului VBA.

Acest lucru se face astfel:

  • Din meniul Editor Visual Basic, faceți clic pe Unelte > Opţiuni
  • În caseta de dialog care apare, deschideți fila Editor
  • Bifeaza casuta Necesită declarație variabilă și apăsați OK

Când este activat, șirul Opțiune explicită va fi inserat automat la începutul fiecărui modul nou creat.

Domeniul de aplicare al variabilelor și constantelor

Fiecare variabilă sau constantă declarată are propriul domeniu de aplicare limitat, adică o parte limitată a programului în care există această variabilă. Domeniul de aplicare depinde de locul în care a fost făcută declarația variabilei sau constantei. Luați, de exemplu, variabila sVAT_Rate, care este folosit în funcție Cost total. Următorul tabel discută două opțiuni pentru domeniul variabil sVAT_Ratedeclarat în două poziții diferite în modul:

Opțiune Explicit Dim sVAT_Rate As Single Function Total_Cost() As Double ... End Function
Dacă variabila sVAT_Rate declarat chiar la începutul modulului, atunci domeniul de aplicare al acestei variabile va fi întregul modul (adică variabila sVAT_Rate vor fi recunoscute de toate procedurile din acest modul).

Prin urmare, dacă în funcție Cost total variabil sVAT_Rate i se va atribui o anumită valoare, apoi următoarea funcție executată în cadrul aceluiași modul va folosi variabila sVAT_Rate cu acelasi sens.

Cu toate acestea, dacă o funcție situată într-un alt modul este apelată, atunci pentru aceasta variabila sVAT_Rate nu va fi cunoscut.

Opțiune Funcție explicită Total_Cost() Ca dublu Dim sVAT_Rate Ca unică ... Funcție de final
Dacă variabila sVAT_Rate declarat la începutul funcţiei Cost total, atunci domeniul său de aplicare va fi limitat doar la această funcție (adică în cadrul funcției Cost total, puteți folosi variabila sVAT_Rate, dar nu afară).

Când încercați să utilizați sVAT_Rate într-o altă procedură, compilatorul VBA va raporta o eroare deoarece această variabilă nu a fost declarată în afara funcției Cost total (cu condiția ca operatorul să fie utilizat Opțiune explicită).

În exemplul prezentat mai sus, variabila este declarată la nivelul modulului cu cuvântul cheie Vag. Cu toate acestea, poate fi necesar ca variabilele declarate să poată fi utilizate în alte module. În astfel de cazuri, pentru a declara o variabilă în loc de un cuvânt cheie Vag trebuie folosit cuvântul cheie Public.

Apropo, pentru a declara o variabilă la nivel de modul, în locul cuvântului cheie Vag poate fi folosit cuvântul cheie Privat, ceea ce indică faptul că această variabilă este destinată utilizării numai în modulul curent.

De asemenea, puteți utiliza cuvinte cheie pentru a declara constante. Public и Privat, dar nu în locul cuvântului cheie const, împreună cu el.

Următoarele exemple arată utilizarea cuvintelor cheie Public и Privat aplicat variabilelor și constantelor.

Opțiunea Explicit Public sVAT_Rate As Single Public Const iMax_Count = 5000 ...    
În acest exemplu, cuvântul cheie Public folosit pentru a declara o variabilă sVAT_Rate și constante iMax_Count. Sfera elementelor astfel declarate va fi întregul proiect curent.

Acest lucru înseamnă că sVAT_Rate и iMax_Count va fi disponibil în orice modul de proiect.

Opțiunea Explicit Private sVAT_Rate As Single Private Const iMax_Count = 5000 ...    
În acest exemplu, pentru a declara o variabilă sVAT_Rate și constante iMax_Count cuvânt cheie folosit Privat. Scopul acestor elemente este modulul actual.

Acest lucru înseamnă că sVAT_Rate и iMax_Count va fi disponibil în toate procedurile modulului curent, dar nu va fi disponibil pentru procedurile din alte module.

Lasă un comentariu