Muutujate ja konstantide mõistmine Exceli makrodes

Sellest artiklist saate teada, millised konstandid ja muutujad on makrodes, kus neid saab kasutada ja mis on erinevate andmetüüpide peamine erinevus. Samuti selgub, miks on konstante vaja, kui saad lihtsalt muutuja kirjutada ja seda mitte kunagi muuta.

Sarnaselt teistele programmeerimiskeeltele saab andmeid salvestada muutujate või konstantidena (mõlemat nimetatakse sageli ka andmemahutiteks). See on nende mõistete peamine erinevus. Esimene võib muutuda sõltuvalt sellest, mis programmis toimub. Konstandid omakorda määratakse üks kord ja nende väärtust ei muudeta.

Konstandid võivad olla kasulikud, kui peate kasutama sama suurt väärtust mitu korda. Numbri kopeerimise asemel võite lihtsalt kirjutada konstandi nime. Näiteks saate Pi salvestamiseks kasutada konstanti "Pi", mis on konstantne väärtus. See on väga suur ja iga kord on seda üsna keeruline kirjutada või otsida ja kopeerida. Ja nii, piisab kahe tähemärgi kirjutamisest ja keskkond kasutab automaatselt soovitud numbrit.

Exceli kasutajal tuleb muutujad deklareerida, kui tal on vaja nendesse salvestatud väärtusi aeg-ajalt muuta. Näiteks saate määrata muutuja nimega sVAT_Rate, mis salvestab toote kehtiva käibemaksumäära. Kui see muutub, saate selle kiiresti parandada. See on eriti kasulik neile, kes ajavad äri USA-s, kus osa kaupu ei pruugi üldse käibemaksuga maksustada (ja see maks on osariigiti ka erinev).

Andmetüübid

Iga andmemahuti võib olla mitut tüüpi. Siin on tabel, mis kirjeldab töödeldud teabe standardtüüpe. Neid on palju ja algajale võib esialgu tunduda, et nad kordavad üksteist. Kuid see on illusoorne tunne. Lugege edasi, et saada teada, miks on õige andmetüübi määramine nii oluline.

Väikeste numbrite puhul ei ole soovitatav kasutada andmetüüpi, mis võtavad mälus rohkem ruumi. Näiteks numbri 1 puhul piisab tüübi Byte kasutamisest. Sellel on positiivne mõju käivitatava mooduli jõudlusele, eriti nõrkade arvutite puhul. Kuid siin on oluline mitte liiga kaugele minna. Kui kasutate liiga kompaktset andmetüüpi, ei pruugi liiga suur väärtus sinna mahtuda.

Konstantide ja muutujate deklareerimine

Andmemahuti kasutamine ilma seda eelnevalt deklareerimata ei ole tungivalt soovitatav. Siis võib tekkida mitmeid probleeme, mille vältimiseks on vaja kirjutada paar väikest koodirida muutujate või konstantide loendamisega.

Muutuja deklareerimiseks kasutatakse lauset Dim. Näiteks nii:

Dim Variable_Name täisarvuna

Muutuja_nimi on muutuja nimi. Järgmisena kirjutatakse operaator As, mis näitab andmetüüpi. Stringide "Muutuja_nimi" ja "Täisarv" asemel saate sisestada oma nime ja andmetüübi.

Konstante saab ka deklareerida, kuid esmalt tuleb määrata nende väärtus. Üks valikutest on:

Const iMaxCount = 5000

Ausalt öeldes saate mõnel juhul teha muutujat deklareerimata, kuid sel juhul määratakse neile automaatselt tüüp Variant. Seda ei soovitata aga järgmistel põhjustel:

  1. Variant töödeldakse palju aeglasemalt ja kui selliseid muutujaid on palju, võib nõrkade arvutite puhul infotöötlus oluliselt aeglustada. Näib, et need sekundid otsustavad? Kuid kui peate kirjutama suure hulga koodiridu ja seejärel käivitama seda ka nõrkades arvutites (mida müüakse endiselt, arvestades, et kaasaegsed kontorikomplektid nõuavad palju muutmälu), saate töö täielikult peatada. On juhtumeid, kui makrode halvasti läbimõeldud kirjutamine viis väikese RAM-iga nutikate raamatute külmutamiseni, mis pole mõeldud keerukate ülesannete täitmiseks. 
  2. Lubatud on trükivead nimedes, mida saab vältida käsuga Option Explicit, mis võimaldab leida deklareerimata muutuja, kui see leitakse. See on lihtne viis vigade tuvastamiseks, kuna vähimagi kirjavea korral ei suuda tõlk muutujat tuvastada. Ja kui lülitate sisse muutuja deklareerimise režiimi, siis tõlk lihtsalt ei luba makrot käivitada, kui leitakse andmekonteinerid, mida mooduli alguses ei deklareeritud.
  3. Vältige vigu, mis on põhjustatud andmetüübile mittevastavate muutujate väärtustest. Tavaliselt annab täisarvulisele muutujale tekstiväärtuse määramine vea. Jah, ühest küljest määratakse üldine tüüp ilma deklaratsioonita, kuid kui need on ette deklareeritud, saab juhuslikke vigu vältida.

Seetõttu on kõigele vaatamata tungivalt soovitatav deklareerida kõik muutujad Exceli makrodes.

Muutujate deklareerimisel tuleb meeles pidada veel üht asja. Muutujale on võimalik selle deklareerimisel väärtusi mitte määrata, kuid sel juhul omandab see vaikeväärtuse. Näiteks:

  1. Read tehakse tühjaks.
  2. Arvud saavad väärtuse 0.
  3. Boolean tüüpi muutujaid peetakse esialgu valedeks.
  4. Vaikimisi on kuupäev 30. detsember 1899.

Näiteks ei pea te täisarvulisele muutujale määrama väärtust 0, kui väärtust pole varem määratud. Ta sisaldab juba seda numbrit.

Valik Selgesõnaline avaldus

See avaldus võimaldab teil deklareerida kõik VBA-koodis kasutatavad muutujad ja määrata deklareerimata konteinerite olemasolu enne koodi käivitamist. Selle funktsiooni kasutamiseks kirjutage lihtsalt makrokoodi ülaossa rida Option Explicit koodi.

Kui peate selle avalduse iga kord oma koodi lisama, saate seda teha VBA-redaktoris spetsiaalse sätte abil. Selle valiku lubamiseks peate:

  1. Minge rajalt arenduskeskkonda – Tööriistad > Valikud.
  2. Pärast seda avanevas aknas avage vahekaart Redigeerija.
  3. Ja lõpuks märkige ruut üksuse Nõua muutuja deklaratsiooni kõrval.

Pärast nende sammude lõpetamist klõpsake nuppu "OK". 

See on kõik, nüüd iga uue makro kirjutamisel lisatakse see rida automaatselt koodi ülaossa.

Konstantide ja muutujate ulatus

Igal muutujal või konstandil on ainult piiratud ulatus. See sõltub sellest, kus te seda deklareerite.

Oletame, et meil on funktsioon Kogumaksumus(), ja see kasutab muutujat sVAT_Rate. Olenevalt positsioonist moodulis on sellel erinev ulatus:

Valik Selgesõnaline

Dim sVAT_Rate Asingle

Funktsioon Total_Cost() as Double

.

.

.

End Function

Kui muutuja deklareeritakse mooduli enda ülaosas, levib see kogu moodulis. See tähendab, et seda saab lugeda iga protseduuriga.

Pealegi, kui üks protseduur muutis muutuja väärtust, siis järgmine loeb ka seda parandatud väärtust. Kuid teistes moodulites seda muutujat ikka ei loeta.

Valik Selgesõnaline

Funktsioon Total_Cost() as Double

Dim sVAT_Rate Asingle

   .

   .

   .

End Function

Sel juhul deklareeritakse muutuja protseduuri sees ja tõlk annab vea, kui seda kasutatakse mõnes teises protseduuris.

Kui soovite, et muutujat loeksid teised moodulid, peate kasutama märksõna Dim asemel avalikku märksõna. Samamoodi saate piirata muutuja ulatust ainult praeguse mooduliga, kasutades avaliku avaldust, mis kirjutatakse sõna Dim asemel.

Konstantide ulatust saab määrata sarnaselt, kuid siinne märksõna kirjutatakse koos operaatoriga Const.

Siin on tabel hea näitega selle kohta, kuidas see konstantide ja muutujatega töötab.

Valik Selgesõnaline

Avalik sVAT_Rate Asingle

Public Const iMax_Count = 5000

Selles näites näete, kuidas kasutatakse muutuja deklareerimiseks märksõna Public ja mida peate Visual Basicu redaktorisse kirjutama avaliku konstandi deklareerimiseks. Nende väärtuskonteinerite ulatus kehtib kõigi moodulite kohta.
Valik Selgesõnaline

Privaatne sVAT_Rate Asingle

Erakonst iMax_Count = 5000

Siin deklareeritakse muutujad ja konstandid, kasutades privaatset märksõna. See tähendab, et neid saab näha ainult praeguses moodulis ja teiste moodulite protseduurid ei saa neid kasutada.

Miks on vaja konstante ja muutujaid

Konstantide ja muutujate kasutamine võimaldab suurendada koodi arusaadavuse astet. Ja kui üldiselt ei teki algajatel küsimusi, miks muutujaid vaja on, siis on konstantide vajaduse osas palju ebaselgust. Ja see küsimus tundub esmapilgul üsna loogiline. Lõppude lõpuks saate muutuja deklareerida üks kord ja seda enam kunagi muuta.

Vastus on kusagil samas tasapinnas, mis puudutab andmetüüpide kasutamist, mis võtavad mälus palju ruumi. Kui tegemist on suure hulga muutujatega, võime kogemata olemasolevat konteinerit muuta. Kui kasutaja näeb ette, et teatud väärtus ei muutu kunagi, kontrollib keskkond seda automaatselt.

See on eriti oluline, kui makro on kirjutanud mitu programmeerijat. Võib ju teada, et mõni muutuja ei tohiks muutuda. Ja teine ​​ei ole. Kui määrate operaatori Const, teab teine ​​arendaja, et see väärtus ei muutu.

Või kui on olemas ühenimeline konstant ja muutujal on erinev, kuid sarnane nimi. Arendaja võib need lihtsalt segadusse ajada. Näiteks üks muutuja, mida pole vaja muuta, kannab nime Muutuja11 ja teine, mida saab redigeerida, kannab nime Muutuja1. Inimene võib koodi kirjutamisel automaatselt lisaühiku vahele jätta ja seda mitte märgata. Selle tulemusena muudetakse väärtuste konteinerit, mida ei tohiks puudutada.

Või võib arendaja ise unustada, milliseid muutujaid ta saab puudutada ja milliseid mitte. See juhtub sageli siis, kui koodi kirjutatakse mitu nädalat ja selle suurus muutub suureks. Selle aja jooksul on väga lihtne unustada isegi seda, mida see või teine ​​muutuja tähendab.

Jah, kommentaaridega saab selles olukorras hakkama, aga kas pole lihtsam täpsustada sõna Const?

Järeldused

Muutujad on makroprogrammeerimise oluline komponent, mis võimaldab teil teha keerulisi toiminguid alates arvutustest kuni kasutaja teavitamiseni teatud sündmustest või konkreetsete väärtuste määramisest arvutustabeli lahtrites.

Konstante tuleks kasutada juhul, kui arendaja teab kindlalt, et nende konteinerite sisu tulevikus ei muutu. Muutujaid on soovitatav mitte kasutada, kuna on võimalik kogemata eksida.

Jäta vastus