marți, 30 iulie 2013

Tipuri de date in VBA



Spre deosebire de alte limbaje de programare in VBA, există un tip universal — tipul Variant —, care poate conţine aproape orice alt tip de date. Acest tip este dat în mod implicit tuturor variabilelor nedeclarate altfel. Pentru a economisii  memorie  (pentru Variant se aloca mai multa memorie) şi a creşte viteza de execuţie  se recomandă declararea explicită.

Tip
Domeniu de valori
Memorie
Declarator
de tip
Boolean
True sau False
2 bytes

Byte
0–255 (numere întregi, fără semn)
1 byte

Currency
-922 337 203 685 477.5808 — 922 337 203 685 477.5807
8 bytes
@
Date
1 ian 100 — 31 dec 9999
 0:00:00 — 23:59:59
8 bytes

Decimal
Vezi nota
12 bytes

Double
-1.79769313486232E308 - 4.94065645841247E-324
numere flotante în dublă precizie
8 bytes
#
Integer
-32 768 — 32 767
2 bytes
%
Long
              -2 147 483 648 — 2 147 483 647
4 bytes
&
Object
Vezi nota
4 bytes

Single
-3.402823E38  -  3.402823E38
4 bytes
!
String
şir de lungime variabila: până la 2^31 caractere;
şir de lungime fixa: până la 2^16 caractere.
10 bytes + şirul propriu-yis
$
Variant
Vezi nota



Note
Currency  -  Sunt utilizate pentru calcule băneşti (sau alte situaţii în care precizia este foarte importantă).
Date -  Informaţiile de tip data calendaristică şi/sau timp orar sunt memorate drept numere flotante, partea întreagă reprezentând data calendaristică, partea fractionară reprezentând timpul.
La convertiri, miezul nopţii este 0, miezul zilei este .5, numerele negative reprezintă date înainte de 30 decembrie 1899.
Decimal -  Intregi  +/-79,228,162,514,264,337,593,543,950,335.
Cu zecimale  28 cifre ptr zecimele +/-7.9228162514264337593543950335
Object  -  Adrese pe 32 de biţi care se referă la obiecte. Prin instructiunea Set se atribuie unei variabile declarate de tip Object referinţa la obiectul dorit.
Variant -
    subtip numeric – orice număr mare decât cel Double, spaţiu alocat
16 bytes
    subtip caractere -  similar cu cele de tip  String, spaţiu alocat 22 bytes plus câte un byte pentru fiecare caracter


Valorile speciale au semnificaţia:
Empty este valoarea unui Variant care nu a fost iniţializat. În calcule numerice este considerat 0 iar în operatii cu siruri este sirul de lungime zero.
Null este valoarea unui Variant care, în mod programatic, nu conţine date.
Error este valoarea utilizată pentru a arăta îndeplinirea unei condiţii de eroare (prin convertirea unui real cu functia CVErr). Procesarea se va efectua de către utilizator, tratarea automată a erorilor nu este activată la setarea acestor valori.
Nothing este utilizată pentru disocierea unei variabile de tip Object de un obiect efectiv.

Tipuri definite de utilizator

[Private | Public] Type varname
     elementname [([subscripts])] As type
     [elementname [([subscripts])] As type]
     . . .
End Type


Declararea constantelor, variabilelor si tablourilor Nume


Reguli:
- primul caracter trebuie să fie o literă;
- nu se utilizează spaţiu, punct (.), semnul exclamării(!), sau caracterele @, &, $, #
- lungimea denumirii nu poate depășii 255 de caractere;
- la acelasi nivel de existenţă nu pot să existe denumiri identice
Nu se utilizează denumiri identice cu nume de funcţii, instrucţiuni sau metode existente în Visual Basic.

Declararea constantelor

Definirea unei constante se realizeaza prin instrucţiunea Const.
                   [Public | Private] Const constname [As type] = expression
Public — opţtional, utilizat la nivel de modul pentru a declara constante recunoscute în toateprocedurile din toate modulele
Private —opţional, utilizat la nivel de modul pentru a declara constante recunoscute în toate procedurile din modulul în care apare declaratia.
constname — numele constantei (obligatoriu).
type — tipul constantei   Fiecare constanta presupune o clauză As type proprie.
expression — combinaţie de identificatori, constante, operatori (cu excepţia Is) care produce un sir, numar sau obiect. Nu se pot utiliza variabile, funcţii utilizator sau funcţii VBA predefinite.
În mod implicit, constantele sunt private. La nivel de procedură, sau de modul clasa, domeniul lor nu poate fi modificat prin utilizarea clauzei Public. La nivel de modul standard vizibilitatea poate fi modificată prin Public.
Constantele declarate în proceduri Sub, Function sau Property sunt locale procedurii, constantele declarate în afara unei proceduri este definita în modulul respectiv.

Declararea variabilelor

Variabilele, simple sau tablou, se definesc prin instructiunile Dim, Private, Public, ReDim sau Static. Numele unei variabile trebuie sa respecte reguli similare cu cele ale constantelor.
În cazul în care modulul contine instructiunea Option Explicit şi care trebuie sa apară înaintea oricărei proceduri din modul, toate variabilele trebuie să fie declarate prin instrucţiunile menţionate. Lipsa instrucţiunii Option Explicit permite ca variabilele să fie definite acolo unde este nevoie de ele prin simpla menţionare a unui nou identificator, tipul lor fiind stabilit implicit. Aceasta ultima posibilitate poate produce erori greu detectabile.

Sintaxa instrucţiunilor de declarare:
  Dim [WithEvents] varname[([subscripts])] [As [New] type]
  Private [WithEvents] varname[([subscripts])] [As [New] type]
  Public [WithEvents] varname[([subscripts])] [As [New] type]
  Static varname[([subscripts])] [As [New] type]
  ReDim [Preserve] varname(subscripts) [As type]
Unde:
varname — numele variabilei (obligatoriu)
subscripts — dimensiunile tabloului de date (dacă se declara o variabilă tablou). Pot exista până la 60 de indici, separaţi prin virgule
Dacă nu se indica limitele indicilor (dar parantezele sunt prezente), se defineşte o variabilă tablou dinamică (nu si prin Static) ale carei dimensiuni pot fi precizate/redefinite prin instrucţiunea ReDim.
New — permite crearea implicită a unui obiect (atunci când se declară o variabilă de tip obiect).

Dim defineşte variabile atât la nivel de modul cât şi la nivel de procedură. Variabilele definite la nivel de modul sunt accesibile în procedurile acelui modul, iar variabilele de la nivel de procedură sunt vizibile doar în procedura respectivă.

Private este utilizată la nivel de modul pentru a declara variabile accesibile doar în procedurile acelui modul.

Public este utilizată pentru a declara variabile accesibile în toate procedurile din toate modulele şi din toate aplicaţiile. Prin includerea instructiunii Option Private Module este posibil ca variabilele publice sa fie vizibile doar în proiectul în care sunt definite.

Static este utilizată la nivel de procedură nestatica pentru a declara variabile care îşi păstrează valoarea de la o execuţie a procedurii la alta, atât timp cât modulul în care apare procedura nu este resetat sau repornit. Variabilele definite prin Static sunt vizibile doar în procedura respectiva. Este de remarcat ca se poate defini o întreaga procedură utilizând clauza Static, caz în care toate variabilele sunt statice.

ReDim este utilizată la nivel de procedură pentru realocarea memoriei variabilelor tablou dinamice. Utilizarea clauzei Preserve permite doar modificarea ultimei dimensiuni şi păstrează valorile deja existente.

 



Domeniul unei variabile, constante sau proceduri

Domeniul unei entităţi reprezintă locul unde poate fi referită acea entitate,  de unde este. Domeniul este dependent de locul definirii entităţii, de clauzele care apar la definire şi de parametrii globali ai proiectului.

Exista trei tipuri de domenii:
la nivel de procedură;
la nivel de modul, privat;
la nivel de modul, public.

Nivelul procedură  - O variabilă sau constantă definită într-o procedura este vizibilă doar în procedura respectivă.

Nivel de modul, privat - Variabilele şi constantele definite la nivel de modul (în secţiunea Declarations) sunt Private în mod implicit, adica sunt vizibile doar în modulul respectiv. Utilizarea clauzei Private nu este deci necesară, dar este recomandată.

Nivel de modul, public - Variabilele declarate la nivel de modul drept Public sunt vizibile în toate procedurile din proiect. Procedurile sunt publice în mod implicit, cu exceptie procedurilor de tratare a evenimentelor, care sunt Private în mod implicit.

Daca se utilizează instrucţiunea Option Private Module (în secţiunea Declarations a modulului) atunci variabilele şi procedurile publice vor fi vizibile doar în proiectul curent.

Niciun comentariu:

Trimiteți un comentariu