Muutujad ja konstandid VBA-s

VBA-s, nagu igas teises programmeerimiskeeles, kasutatakse väärtuste salvestamiseks muutujaid ja konstante. Nagu nimigi viitab, võivad muutujad muutuda, samas kui konstandid salvestavad fikseeritud väärtusi.

Näiteks konstant Pi salvestab väärtuse 3,14159265... Arv “Pi” programmi täitmise ajal ei muutu, kuid mugavam on siiski sellist väärtust konstantina salvestada.

Samal ajal saame kasutada muutujat sVAT_Rate salvestada ostetud kaupade käibemaksumäär. Muutuv väärtus sVAT_Rate võib olenevalt ostetud tootest erineda.

Andmetüübid

Kõik muutujad ja konstandid on kindlat andmetüüpi. Allolevas tabelis on loetletud VBA-s kasutatavad andmetüübid koos kirjelduse ja võimalike väärtuste vahemikuga.

Andmetüüp SUURUSKirjeldusVäärtuste vahemik
Bait1 baitiPositiivsed täisarvud; kasutatakse sageli binaarandmete jaoksalates 0 et 255
Boolean2 baitiVõib olla kas tõene või valeÕige või vale
Täisarv2 baitiTäisarvud (ilma murdosata)vahemikus -32 kuni +768
Pikk4 baitiSuured täisarvud (ilma murdosata)от -2 147 483 648 до +2 147 483 647
ühekordne4 baitiÜks täppis ujukomaarv-3.4e38 kuni +3.4e38
Kahekordistada8 baitiKahekordse täpsusega ujukomaarv-1.8e308 kuni +1.8e308
valuuta8 baitiUjukomaarv kindla arvu komakohtadegaот -922 337 203 685 477.5808 до +922 337 203 685 477.5807
kuupäev8 baitiKuupäev ja kellaaeg – Kuupäeva tüüpi andmed on kujutatud ujukomanumbriga. Selle arvu täisarvuline osa väljendab kuupäeva ja murdosa kellaaega.1. jaanuarist 100 kuni 31. detsembrini 9999
objekt4 baitiObjekti viideMis tahes objektiviide
nöörmuutubTähemärkide komplekt. Stringi tüüp võib olla fikseeritud või muutuva pikkusega. Kasutatakse sagedamini muutuva pikkusegaFikseeritud pikkus – kuni ligikaudu 65 tähemärki. Muutuv pikkus – kuni ligikaudu 500 miljardit tähemärki
variantmuutubVõib sisaldada kuupäeva, hõljukit või märgistringi. Seda tüüpi kasutatakse juhtudel, kui ei ole ette teada, millist tüüpi andmeid sisestatakse.Number – topelt, string – string

Ilmselgelt saate ülaltoodud tabelit kasutades ja õiget andmetüüpi valides kasutada mälu säästlikumalt (näiteks valida andmetüüp Täisarv selle asemel Pikk or ühekordne selle asemel Kahekordistada). Kuid kompaktsemate andmetüüpide kasutamisel peate olema ettevaatlik, et teie kood ei püüaks nendesse mahutada ebaproportsionaalselt suuri väärtusi.

Muutujate ja konstantide deklareerimine

Tõlkija märkus: Rääkides muutujatest VBA-s, tasub mainida veel ühte väga olulist punkti. Kui deklareerime muutuja, kuid ei anna sellele väärtust, siis lähtestatakse see vaikeväärtusega:

• tekstistringid initsialiseeritakse tühjade stringidega;

• numbrid — väärtus 0;

• tüübimuutujad Boolean — vale;

• kuupäevad – 30. detsember 1899. a.

Enne muutuja või konstanti kasutamist tuleb see deklareerida. Selleks lisage makrole järgmine lihtne koodirida:

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

Ülaltoodud koodireal Muutuja_nimi on koodis kasutatava muutuja nimi ja Andmetüüp on üks andmetüüpidest selles artiklis veidi varem toodud tabelist. Näiteks:

Dim sVAT_Rate Asingle Dim i As Integer

Konstandid deklareeritakse sarnaselt, kuid konstantide deklareerimisel tuleb kohe märkida nende väärtus. Näiteks nii:

Const iMaxCount = 5000 Const iMaxScore = 100

Muutujaid pole vaja Excelis deklareerida. Vaikimisi on kõigil Excelis sisestatud, kuid deklareerimata muutujatel tüüp variant ja suudab vastu võtta nii numbrilisi kui ka tekstilisi väärtusi.

Seega saab programmeerija uut muutujat igal ajal kasutada (isegi kui seda pole deklareeritud) ja Excel käsitleb seda tüüpi muutujana variant. Siiski on mitu põhjust, miks seda ei tohiks teha:

  1. Mälu kasutamine ja arvutuskiirus. Kui te ei deklareeri muutujat andmetüübi näiduga, määratakse see vaikimisi tüübile variant. See andmetüüp kasutab rohkem mälu kui teised andmetüübid. Mõni lisabait muutuja kohta ei pruugi tunduda palju, kuid praktikas võib programmidel olla tuhandeid muutujaid (eriti massiividega töötamisel). Seetõttu on muutujate kasutatav lisamälu nagu variant, võrreldes tüüpi muutujatega Täisarv or ühekordne, võib kokku võtta märkimisväärse summa. Lisaks toimingud tüüpi muutujatega variant täidetakse palju aeglasemalt kui muud tüüpi muutujate puhul, vastavalt tuhat lisamuutujat variant võib arvutusi oluliselt aeglustada.
  2. Muutujate nimede kirjavigade vältimine. Kui kõik muutujad on deklareeritud, saab kasutada VBA-lauset − Valik Selgesõnaline (räägime sellest hiljem), et tuvastada kõik deklareerimata muutujad. See välistab vea ilmnemise programmis valesti kirjutatud muutuja nime tõttu. Näiteks kasutades muutujat nimega sVAT_Rate, võid teha kirjavea ja andes sellele muutujale väärtuse, kirjutada: “VATRate = 0,175”. Eeldatakse, et nüüdsest muutuja sVAT_Rate peaks sisaldama väärtust 0,175 – aga loomulikult ei ole. Kui kõigi kasutatavate muutujate kohustusliku deklareerimise režiim on lubatud, näitab VBA kompilaator kohe viga, kuna ta ei leia muutujat VATRe kuulutatute hulgas.
  3. Väärtuste esiletõstmine, mis ei ühti muutuja deklareeritud tüübiga. Kui deklareerite teatud tüüpi muutuja ja proovite sellele omistada erinevat tüüpi andmeid, saate veateate, mille parandamata jätmine võib põhjustada programmi krahhi. Esmapilgul võib see tunduda hea põhjus muutujaid mitte deklareerida, kuid tegelikult selgub enne, et üks muutujatest sai valed andmed, mida ta pidi saama – seda parem! Vastasel juhul võivad programmi töö jätkamisel tulemused olla valed ja ootamatud ning vigade põhjuse leidmine on palju keerulisem. Samuti on võimalik, et makro on "edukalt" täidetud. Selle tulemusena jääb viga märkamatuks ja töö jätkub valede andmetega!

Sellega seoses on soovitav tuvastada vale andmetüüp ja parandada sellised vead koodis võimalikult varakult. Nendel põhjustel on soovitatav VBA-makro kirjutamisel deklareerida kõik muutujad.

Valik Selgesõnaline

operaator Valik Selgesõnaline põhjustab kõigi VBA koodis kasutatavate muutujate deklareerimise ja märgib kõik deklareerimata muutujad kompileerimise ajal vigadena (enne koodi käivitamist). Selle operaatori rakendamine pole keeruline – lihtsalt kirjutage see rida VBA-faili ülaossa:

Option Explicit

Kui soovite alati sisestada Valik Selgesõnaline iga uue loodud VBA mooduli algusesse, saab seda teha automaatselt. Selleks peate selle valiku lubama Nõua muutuja deklaratsiooni VBA redaktori seadetes.

Seda tehakse järgmiselt:

  • Klõpsake Visual Basicu redaktori menüüs töövahendid > Valikud
  • Avage ilmuvas dialoogiaknas vahekaart toimetaja
  • Märkige ruut Nõua muutuja deklaratsiooni ja vajutage OK

Kui see on lubatud, siis string Valik Selgesõnaline lisatakse automaatselt iga uue loodud mooduli algusesse.

Muutujate ja konstantide ulatus

Igal deklareeritud muutujal või konstandil on oma piiratud ulatus, st piiratud osa programmist, milles see muutuja eksisteerib. Ulatus sõltub sellest, kus muutuja või konstandi deklaratsioon tehti. Võtke näiteks muutuja sVAT_Rate, mida kasutatakse funktsioonis Kogumaksumus. Järgmises tabelis käsitletakse kahte muutuva ulatuse valikut sVAT_Ratedeklareeritud moodulis kahel erineval positsioonil:

Valik Explicit Dim sVAT_Rate As Single Function Total_Cost() as Double ... Lõppfunktsioon
Kui muutuja sVAT_Rate deklareeritakse kohe mooduli alguses, siis on selle muutuja ulatuseks kogu moodul (st muutuja sVAT_Rate tunnustatakse kõigi selle mooduli protseduuridega).

Seega, kui funktsioonis Kogumaksumus muutuja sVAT_Rate omistatakse mingi väärtus, siis kasutab muutujat järgmine sama mooduli sees käivitatav funktsioon sVAT_Rate sama tähendusega.

Kui aga kutsutakse mõni teises moodulis asuv funktsioon, siis selle jaoks muutuja sVAT_Rate teada ei saa.

Valik Eksplitsiitne funktsioon Total_Cost() As Double Dim sVAT_Rate As Single ... Lõppfunktsioon
Kui muutuja sVAT_Rate deklareeritud funktsiooni alguses Kogumaksumus, siis on selle ulatus piiratud ainult selle funktsiooniga (st funktsiooni sees Kogumaksumus, saate kasutada muutujat sVAT_Rate, kuid mitte väljaspool).

Kui proovite kasutada sVAT_Rate mõnes teises protseduuris teatab VBA kompilaator veast, kuna seda muutujat ei deklareeritud väljaspool funktsiooni Kogumaksumus (eeldusel, et kasutatakse operaatorit Valik Selgesõnaline).

Ülaltoodud näites deklareeritakse muutuja mooduli tasemel märksõnaga Dim. Siiski võib olla vajalik, et deklareeritud muutujaid saaks kasutada ka teistes moodulites. Sellistel juhtudel deklareerida märksõna asemel muutuja Dim märksõna tuleb kasutada avalik.

Muide, selleks, et deklareerida mooduli tasemel, märksõna asemel muutuja Dim märksõna saab kasutada Era-, mis näitab, et see muutuja on mõeldud kasutamiseks ainult praeguses moodulis.

Konstantide deklareerimiseks saate kasutada ka märksõnu. avalik и Era-, kuid mitte märksõna asemel Konst, koos sellega.

Järgmised näited näitavad märksõnade kasutamist avalik и Era- rakendatakse muutujatele ja konstantidele.

Valik Explicit Public sVAT_Rate As Single Public Const iMax_Count = 5000 ...    
Selles näites on märksõna avalik kasutatakse muutuja deklareerimiseks sVAT_Rate ja konstandid iMax_Count. Sel viisil deklareeritud elementide ulatus hõlmab kogu praegust projekti.

See tähendab, et sVAT_Rate и iMax_Count on saadaval igas projekti moodulis.

Valik Explicit Private sVAT_Rate Asingle Private Const iMax_Count = 5000 ...    
Selles näites muutuja deklareerimiseks sVAT_Rate ja konstandid iMax_Count kasutatud märksõna Era-. Nende elementide ulatus on praegune moodul.

See tähendab, et sVAT_Rate и iMax_Count on saadaval kõigis praeguse mooduli protseduurides, kuid ei ole saadaval teiste moodulite protseduuride jaoks.

Jäta vastus