Spremenljivke in konstante v VBA

V VBA, tako kot v katerem koli drugem programskem jeziku, se spremenljivke in konstante uporabljajo za shranjevanje poljubnih vrednosti. Kot pove že ime, se spremenljivke lahko spreminjajo, medtem ko konstante hranijo fiksne vrednosti.

Na primer, konstanta Pi shrani vrednost 3,14159265… Število "Pi" se med izvajanjem programa ne bo spremenilo, vendar je še vedno bolj priročno shraniti takšno vrednost kot konstanto.

Hkrati lahko uporabimo spremenljivko sDDV_Rate za shranjevanje stopnje DDV na kupljeno blago. Spremenljiva vrednost sDDV_Rate se lahko razlikujejo glede na kupljeni izdelek.

Vrste podatkov

Vse spremenljivke in konstante so določene vrste podatkov. V spodnji tabeli so navedeni tipi podatkov, ki se uporabljajo v VBA, z opisom in obsegom možnih vrednosti:

Vrsta podatkov VelikostiOpisObmočje vrednosti
Bajt1 bajtovPozitivna cela števila; pogosto uporablja za binarne podatkeod 0 na 255
Boolean2 bajtovLahko je True ali FalsePravilno ali napačno
Integer2 bajtovCela števila (brez ulomkov)od -32 do +768
Long4 bajtovVelika cela števila (brez ulomkov)от -2 147 483 648 до +2 147 483 647
sam4 bajtovŠtevilo s plavajočo vejico enojne natančnostiod -3.4e38 do +3.4e38
double8 bajtovŠtevilo s plavajočo vejico dvojne natančnostiod -1.8e308 do +1.8e308
valuta8 bajtovŠtevilo s plavajočo vejico s fiksnim številom decimalnih mestот -922 337 203 685 477.5808 до +922 337 203 685 477.5807
Datum8 bajtovDatum in čas – podatki tipa Datum so predstavljeni s številom s plavajočo vejico. Celo število tega števila izraža datum, ulomek pa čas.od 1. januarja 100 do 31. decembra 9999
predmet4 bajtovReferenca predmetaVsaka referenca predmeta
Stringse spreminjaNabor znakov. Vrsta niza je lahko fiksne ali spremenljive dolžine. Pogosteje se uporablja s spremenljivo dolžinoFiksna dolžina – do približno 65 znakov. Spremenljiva dolžina – do približno 500 milijard znakov
Variantse spreminjaLahko vsebuje datum, plavajočo vrednost ali niz znakov. Ta vrsta se uporablja v primerih, ko ni vnaprej znano, kateri tip podatkov se bo vnesel.Število – dvojno, niz – niz

Očitno je, da lahko z uporabo zgornje tabele in izbiro pravega podatkovnega tipa varčneje porabite pomnilnik (na primer izberite podatkovni tip Integer Namesto Long or sam Namesto double). Pri uporabi kompaktnejših tipov podatkov pa morate paziti, da vaša koda ne poskuša vanje vstaviti nesorazmerno velikih vrednosti.

Deklariranje spremenljivk in konstant

Opomba prevajalca: Ko že govorimo o spremenljivkah v VBA, velja omeniti še eno zelo pomembno točko. Če deklariramo spremenljivko, vendar ji ne dodelimo nobene vrednosti, se inicializira s privzeto vrednostjo:

• besedilni nizi so inicializirani s praznimi nizi;

• številke — vrednost 0;

• tipske spremenljivke Boolean — Napačno;

• datumi – 30. december 1899.

Pred uporabo spremenljivke ali konstante jo je treba deklarirati. Če želite to narediti, makru dodajte naslednjo preprosto vrstico kode:

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

V zgornji vrstici kode Ime spremenljivke je ime spremenljivke, ki bo uporabljena v kodi, in Vrsta_podatkov je eden od tipov podatkov iz tabele, podane malo prej v tem članku. Na primer:

Dim sVAT_Rate As Single Dim i As Integer

Konstante deklariramo podobno, le da je treba pri deklaraciji konstant takoj navesti njihovo vrednost. Na primer takole:

Const iMaxCount = 5000 Const iMaxScore = 100

Spremenljivk v Excelu ni treba deklarirati. Privzeto bodo vse vnesene, vendar nedeklarirane spremenljivke v Excelu imele vrsto Variant in bo lahko sprejel tako številsko kot besedilno vrednost.

Tako lahko programer kadarkoli uporabi novo spremenljivko (tudi če ni bila deklarirana), Excel pa jo bo obravnaval kot spremenljivko tipa Variant. Vendar obstaja več razlogov, zakaj tega ne bi smeli storiti:

  1. Poraba pomnilnika in hitrost računanja. Če spremenljivke ne deklarirate z navedbo vrste podatkov, bo privzeto nastavljena na vrsto Variant. Ta vrsta podatkov uporablja več pomnilnika kot druge vrste podatkov. Nekaj ​​dodatnih bajtov na spremenljivko morda ne zveni veliko, toda v praksi imajo lahko programi na tisoče spremenljivk (zlasti pri delu z nizi). Zato dodatni pomnilnik, ki ga uporabljajo spremenljivke, kot je Variant, v primerjavi s spremenljivkami tipa Integer or sam, lahko prispevajo do znatnega zneska. Poleg tega so operacije s spremenljivkami tipa Variant se izvajajo veliko počasneje kot s spremenljivkami drugih tipov oziroma dodatnih tisoč spremenljivk tipa Variant lahko znatno upočasni izračune.
  2. Preprečevanje tipkarskih napak v imenih spremenljivk. Če so deklarirane vse spremenljivke, se lahko uporabi stavek VBA − Option Explicit (o tem bomo govorili kasneje), da bi identificirali vse neprijavljene spremenljivke. S tem se odpravi pojav napake v programu zaradi nepravilno zapisanega imena spremenljivke. Na primer z uporabo spremenljivke z imenom sDDV_Rate, lahko naredite tipkarsko napako in, ko tej spremenljivki dodelite vrednost, napišete: "VATRate = 0,175". Predvidoma odslej spremenljivka sDDV_Rate mora vsebovati vrednost 0,175 – a je seveda ni. Če je omogočen način obvezne deklaracije vseh uporabljenih spremenljivk, bo prevajalnik VBA takoj pokazal napako, saj spremenljivke ne bo našel stopnja DDV med napovedanimi.
  3. Označevanje vrednosti, ki se ne ujemajo z deklarirano vrsto spremenljivke. Če deklarirate spremenljivko določenega tipa in ji poskušate dodeliti podatke drugega tipa, boste prejeli napako, ki lahko povzroči zrušitev programa, če je ne popravite. Na prvi pogled se morda zdi to dober razlog, da spremenljivk ne deklariramo, a v resnici, ko se prej izkaže, da je ena od spremenljivk prejela napačne podatke, ki bi jih morala prejeti – toliko bolje! V nasprotnem primeru, če se program še naprej izvaja, so lahko rezultati nepravilni in nepričakovani, veliko težje pa bo najti vzrok za napake. Možno je tudi, da bo makro »uspešno« izveden. Posledično bo napaka ostala neopažena in delo se bo nadaljevalo z napačnimi podatki!

V zvezi s tem je zaželeno odkriti napačen tip podatkov in popraviti takšne napake v kodi čim prej. Zaradi teh razlogov je priporočljivo, da pri pisanju makra VBA deklarirate vse spremenljivke.

Option Explicit

Operater Option Explicit povzroči, da so deklarirane vse spremenljivke, ki bodo uporabljene v kodi VBA, in označi vse nedeklarirane spremenljivke kot napake med prevajanjem (preden se začne izvajanje kode). Uporaba tega operatorja ni težka – samo napišite to vrstico na sam vrh datoteke VBA:

Option Explicit

Če želite vedno vstaviti Option Explicit na vrh vsakega novega ustvarjenega modula VBA, se to lahko izvede samodejno. Če želite to narediti, morate omogočiti možnost Zahtevaj deklaracijo spremenljivke v nastavitvah urejevalnika VBA.

To se naredi tako:

  • V meniju urejevalnika Visual Basic kliknite orodja > možnosti
  • V pogovornem oknu, ki se prikaže, odprite zavihek urednik
  • Potrdite polje Zahtevaj deklaracijo spremenljivke in pritisnite OK

Ko je omogočeno, niz Option Explicit bo samodejno vstavljen na začetek vsakega novega ustvarjenega modula.

Obseg spremenljivk in konstant

Vsaka deklarirana spremenljivka ali konstanta ima svoj omejeni obseg, to je omejen del programa, v katerem ta spremenljivka obstaja. Obseg je odvisen od tega, kje je bila podana deklaracija spremenljivke ali konstante. Vzemimo na primer spremenljivko sDDV_Rate, ki se uporablja v funkciji Skupni stroški. Naslednja tabela obravnava dve možnosti za obseg spremenljivke sDDV_Ratedeklariran na dveh različnih mestih v modulu:

Možnost Eksplicitno Dim sVAT_Rate Kot ena funkcija Total_Cost() Kot dvojna ... Končna funkcija
Če spremenljivka sDDV_Rate deklarirano na samem začetku modula, bo obseg te spremenljivke celoten modul (tj. spremenljivka sDDV_Rate bodo prepoznali vsi postopki v tem modulu).

Če torej v funkciji Skupni stroški spremenljivka sDDV_Rate bo dodeljena neka vrednost, potem bo naslednja funkcija, izvedena znotraj istega modula, uporabila spremenljivko sDDV_Rate z enakim pomenom.

Če pa se pokliče neka funkcija, ki se nahaja v drugem modulu, potem zanjo spremenljivka sDDV_Rate ne bo znano.

Možnost Eksplicitna funkcija Total_Cost() As Double Dim sVAT_Rate As Single ... End Function
Če spremenljivka sDDV_Rate deklarirano na začetku funkcije Skupni stroški, bo njegov obseg omejen samo na to funkcijo (tj. znotraj funkcije Skupni stroški, lahko uporabite spremenljivko sDDV_Rate, vendar ne zunaj).

Pri poskusu uporabe sDDV_Rate v drugem postopku bo prevajalnik VBA javil napako, ker ta spremenljivka ni bila deklarirana zunaj funkcije Skupni stroški (pod pogojem, da je uporabljen operater Option Explicit).

V zgornjem primeru je spremenljivka deklarirana na ravni modula s ključno besedo Dim. Vendar bo morda potrebno, da se deklarirane spremenljivke lahko uporabijo v drugih modulih. V takšnih primerih je treba namesto ključne besede deklarirati spremenljivko Dim mora biti uporabljena ključna beseda javno.

Mimogrede, da bi namesto ključne besede deklarirali spremenljivko na ravni modula Dim lahko uporabite ključno besedo Zasebno, kar pomeni, da je ta spremenljivka namenjena samo za uporabo v trenutnem modulu.

Za deklaracijo konstant lahko uporabite tudi ključne besede. javno и Zasebno, vendar ne namesto ključne besede Konst, skupaj z njim.

Naslednji primeri prikazujejo uporabo ključnih besed javno и Zasebno uporabi za spremenljivke in konstante.

Možnost Explicit Public sVAT_Rate As Single Public Const iMax_Count = 5000 ...    
V tem primeru ključna beseda javno ki se uporablja za deklaracijo spremenljivke sDDV_Rate in konstante iMax_Count. Obseg tako deklariranih elementov bo celoten trenutni projekt.

To pomeni, da sDDV_Rate и iMax_Count bo na voljo v katerem koli projektnem modulu.

Možnost Explicit Private sVAT_Rate As Single Private Const iMax_Count = 5000 ...    
V tem primeru za deklaracijo spremenljivke sDDV_Rate in konstante iMax_Count uporabljena ključna beseda Zasebno. Obseg teh elementov je trenutni modul.

To pomeni, da sDDV_Rate и iMax_Count bo na voljo v vseh postopkih trenutnega modula, ne bo pa na voljo za postopke v drugih modulih.

Pustite Odgovori