Muuttujat ja vakiot VBA:ssa

VBA:ssa, kuten missä tahansa muussa ohjelmointikielessä, muuttujia ja vakioita käytetään arvojen tallentamiseen. Kuten nimestä voi päätellä, muuttujat voivat muuttua, kun taas vakiot tallentavat kiinteitä arvoja.

Esimerkiksi vakio Pi tallentaa arvon 3,14159265… Luku “Pi” ei muutu ohjelman suorituksen aikana, mutta on silti kätevämpää tallentaa sellainen arvo vakiona.

Samalla voimme käyttää muuttujaa sVAT_Rate tallentaa ostettujen tavaroiden arvonlisäverokannan. Muuttuva arvo sVAT_Rate voi vaihdella ostetun tuotteen mukaan.

Tietotyypit

Kaikki muuttujat ja vakiot ovat tiettyä tietotyyppiä. Alla olevassa taulukossa on lueteltu VBA:ssa käytetyt tietotyypit sekä kuvaukset ja mahdolliset arvot:

Tietotyyppi KokoKuvausArvoalue
Tavu1 tavuaPositiiviset kokonaisluvut; käytetään usein binääritietoihinalkaen 0 ja 255
boolean2 tavuaVoi olla joko tosi tai epätosiTotta vai tarua
Kokonaisluku2 tavuaKokonaisluvut (ei murto-osaa)välillä -32 - +768
Pitkät4 tavuaSuuret kokonaisluvut (ei murto-osaa)от -2 147 483 648 до +2 147 483 647
single4 tavuaYksittäinen tarkkuus liukuluku-3.4e38 - +3.4e38
Kaksinkertainen8 tavuaKaksinkertainen tarkkuus liukuluku-1.8e308 - +1.8e308
valuutta8 tavuaLiukuluku, jossa on kiinteä määrä desimaalejaот -922 337 203 685 477.5808 до +922 337 203 685 477.5807
Päivämäärä8 tavuaPäivämäärä ja aika – Date-tyyppiset tiedot esitetään liukulukulla. Tämän luvun kokonaislukuosa ilmaisee päivämäärän ja murto-osa ilmaisee ajan.1. tammikuuta 100 - 31. joulukuuta 9999
objekti4 tavuaObjektiviittausMikä tahansa objektiviittaus
jonoon muuttumassaMerkistö. Merkkijonotyyppi voi olla kiinteä tai muuttuvapituinen. Käytetään yleisemmin vaihtelevan pituuden kanssaKiinteä pituus – enintään noin 65 merkkiä. Vaihtuva pituus – jopa noin 500 miljardia merkkiä
varianttion muuttumassaSaattaa sisältää päivämäärän, kelluvan tai merkkijonon. Tätä tyyppiä käytetään tapauksissa, joissa ei ole etukäteen tiedossa, minkä tyyppisiä tietoja syötetään.Numero – Double, merkkijono – merkkijono

On selvää, että käyttämällä yllä olevaa taulukkoa ja valitsemalla oikea tietotyyppi, voit käyttää muistia taloudellisemmin (esim. Kokonaisluku sen sijaan Pitkät or single sen sijaan Kaksinkertainen). Pienempiä tietotyyppejä käytettäessä on kuitenkin varottava, ettei koodi yritä sovittaa niihin suhteettoman suuria arvoja.

Muuttujien ja vakioiden ilmoittaminen

Kääntäjän huomautus: VBA:n muuttujista puhuttaessa on syytä mainita vielä yksi erittäin tärkeä seikka. Jos ilmoitamme muuttujan, mutta emme anna sille arvoa, se alustetaan oletusarvolla:

• tekstijonot alustetaan tyhjillä merkkijonoilla;

• numerot — arvo 0;

• tyyppimuuttujat boolean - Väärä;

• päivämäärät – 30. joulukuuta 1899.

Ennen kuin muuttujaa tai vakiota voidaan käyttää, se on ilmoitettava. Voit tehdä tämän lisäämällä seuraavan yksinkertaisen koodirivin makroon:

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

Yllä olevalla koodirivillä Muuttujan_nimi on koodissa käytettävän muuttujan nimi, ja Tietotyyppi on yksi tietotyypeistä tässä artikkelissa hieman aiemmin annetusta taulukosta. Esimerkiksi:

Dim sVAT_Rate As Single Dim i As Integer

Vakiot ilmoitetaan samalla tavalla, mutta vakioita ilmoitettaessa niiden arvo on ilmoitettava välittömästi. Esimerkiksi näin:

Vakio iMaxCount = 5000 Const iMaxScore = 100

Muuttujia ei tarvitse ilmoittaa Excelissä. Oletusarvoisesti kaikilla Excelin syötetyillä, mutta ilmoittamattomilla muuttujilla on tyyppi variantti ja pystyy hyväksymään sekä numeerisia että tekstiarvoja.

Siten ohjelmoija voi käyttää uutta muuttujaa milloin tahansa (vaikka sitä ei olisi ilmoitettu), ja Excel käsittelee sitä tyyppisenä muuttujana. variantti. On kuitenkin useita syitä, miksi tätä ei pitäisi tehdä:

  1. Muistin käyttö ja laskentanopeus. Jos et määritä muuttujaa tietotyypin merkinnällä, se asetetaan oletusarvoisesti tyyppiin variantti. Tämä tietotyyppi käyttää enemmän muistia kuin muut tietotyypit. Muutama ylimääräinen tavu muuttujaa kohden ei ehkä kuulosta paljolta, mutta käytännössä ohjelmissa voi olla tuhansia muuttujia (etenkin taulukoiden kanssa työskennellessä). Siksi muuttujien käyttämä ylimääräinen muisti, kuten varianttityyppisiin muuttujiin verrattuna Kokonaisluku or single, voi lisätä jopa huomattavan määrän. Lisäksi operaatiot tyyppisillä muuttujilla variantti suoritetaan paljon hitaammin kuin muiden tyyppisten muuttujien kanssa, vastaavasti tuhat ylimääräistä tyyppistä muuttujaa variantti voi merkittävästi hidastaa laskelmia.
  2. Kirjoitusvirheiden estäminen muuttujien nimissä. Jos kaikki muuttujat on ilmoitettu, voidaan käyttää VBA-käskyä − Option Explicit (puhumme siitä myöhemmin) tunnistaaksemme kaikki ilmoittamattomat muuttujat. Tämä eliminoi virheellisesti kirjoitetun muuttujan nimen aiheuttaman virheen esiintymisen ohjelmassa. Esimerkiksi käyttämällä muuttujaa nimeltä sVAT_Rate, voit tehdä kirjoitusvirheen ja antaa tälle muuttujalle arvon kirjoittaa: "VATRate = 0,175". On odotettavissa, että tästä lähtien muuttuja sVAT_Rate pitäisi sisältää arvon 0,175 – mutta ei tietenkään ole. Jos kaikkien käytettyjen muuttujien pakollisen ilmoituksen tila on käytössä, VBA-kääntäjä ilmoittaa välittömästi virheestä, koska se ei löydä muuttujaa VATR ilmoitettujen joukossa.
  3. Korostetaan arvot, jotka eivät vastaa muuttujan ilmoitettua tyyppiä. Jos määrität tietyn tyyppisen muuttujan ja yrität määrittää sille erityyppistä dataa, saat virheilmoituksen, joka voi aiheuttaa ohjelman kaatumisen, jos sitä ei korjata. Ensi silmäyksellä tämä saattaa tuntua hyvältä syyltä olla ilmoittamatta muuttujia, mutta itse asiassa kuin ennen käy ilmi, että yksi muuttujista on saanut väärää dataa, jota sen piti vastaanottaa – sen parempi! Muuten, jos ohjelma jatkuu, tulokset voivat olla virheellisiä ja odottamattomia, ja virheiden syyn löytäminen on paljon vaikeampaa. On myös mahdollista, että makro suoritetaan "onnistuneesti". Tämän seurauksena virhe jää huomaamatta ja työ jatkuu virheellisillä tiedoilla!

Tässä suhteessa on toivottavaa havaita virheellinen tietotyyppi ja korjata tällaiset virheet koodissa mahdollisimman varhaisessa vaiheessa. Näistä syistä on suositeltavaa ilmoittaa kaikki muuttujat VBA-makroa kirjoitettaessa.

Option Explicit

operaattori Option Explicit aiheuttaa sen, että kaikki muuttujat, joita käytetään VBA-koodissa, ilmoitetaan, ja merkitsee kaikki ilmoittamattomat muuttujat virheiksi kääntämisen aikana (ennen koodin suorittamisen alkamista). Tämän operaattorin käyttäminen ei ole vaikeaa – kirjoita tämä rivi VBA-tiedoston yläosaan:

Option Explicit

Jos haluat aina lisätä Option Explicit jokaisen uuden luodun VBA-moduulin alkuun, tämä voidaan tehdä automaattisesti. Tätä varten sinun on otettava vaihtoehto käyttöön Vaadi muuttuva ilmoitus VBA-editorin asetuksissa.

Tämä tehdään seuraavasti:

  • Napsauta Visual Basic Editor -valikosta työkalut > Vaihtoehdot
  • Avaa välilehti näkyviin tulevassa valintaikkunassa toimittaja
  • Valitse ruutu Vaadi muuttuva ilmoitus ja paina OK

Kun tämä on käytössä, merkkijono Option Explicit lisätään automaattisesti jokaisen luodun uuden moduulin alkuun.

Muuttujien ja vakioiden laajuus

Jokaisella ilmoitetulla muuttujalla tai vakiolla on oma rajoitettu laajuutensa, eli rajoitettu osa ohjelmasta, jossa tämä muuttuja on. Laajuus riippuu siitä, missä muuttuja tai vakio on ilmoitettu. Otetaan esimerkiksi muuttuja sVAT_Rate, jota käytetään funktiossa Kokonaiskustannukset. Seuraavassa taulukossa käsitellään kahta muuttuvan laajuuden vaihtoehtoa sVAT_Rateilmoitettu kahdessa eri kohdassa moduulissa:

Vaihtoehto Explicit Dim sVAT_Rate As Single Function Total_Cost() Kuten Double ... Lopeta funktio
Jos muuttuja sVAT_Rate ilmoitetaan aivan moduulin alussa, tämän muuttujan laajuus on koko moduuli (eli muuttuja sVAT_Rate tunnistetaan kaikissa tämän moduulin menettelyissä).

Jos siis funktiossa Kokonaiskustannukset muuttuja sVAT_Rate määritetään jokin arvo, niin seuraava samassa moduulissa suoritettava funktio käyttää muuttujaa sVAT_Rate samalla merkityksellä.

Jos kuitenkin kutsutaan jokin toisessa moduulissa oleva funktio, niin sille muuttuja sVAT_Rate ei tule tiedoksi.

Vaihtoehto Explicit Function Total_Cost() As Double Dim sVAT_Rate As Single ... Lopeta funktio
Jos muuttuja sVAT_Rate ilmoitetaan funktion alussa Kokonaiskustannukset, sen soveltamisala rajoittuu vain tähän funktioon (eli funktion sisällä Kokonaiskustannukset, voit käyttää muuttujaa sVAT_Rate, mutta ei ulkopuolella).

Kun yritetään käyttää sVAT_Rate toisessa menettelyssä VBA-kääntäjä ilmoittaa virheestä, koska tätä muuttujaa ei ilmoitettu funktion ulkopuolelle Kokonaiskustannukset (edellyttäen, että operaattoria käytetään Option Explicit).

Yllä esitetyssä esimerkissä muuttuja ilmoitetaan moduulitasolla avainsanalla Hämärä. Voi kuitenkin olla tarpeen, että ilmoitettuja muuttujia voidaan käyttää muissa moduuleissa. Tällaisissa tapauksissa ilmoittaa muuttuja avainsanan sijaan Hämärä avainsanaa on käytettävä julkinen.

Muuten, jotta voidaan ilmoittaa muuttuja moduulitasolla avainsanan sijaan Hämärä avainsanaa voidaan käyttää yksityinen, mikä osoittaa, että tämä muuttuja on tarkoitettu käytettäväksi vain nykyisessä moduulissa.

Voit myös käyttää avainsanoja vakioiden ilmoittamiseen. julkinen и yksityinen, mutta ei avainsanan sijasta Const, sen mukana.

Seuraavat esimerkit osoittavat avainsanojen käytön julkinen и yksityinen sovelletaan muuttujiin ja vakioihin.

Vaihtoehto Explicit Public sVAT_Rate As Single Public Const iMax_Count = 5000...    
Tässä esimerkissä avainsana julkinen käytetään muuttujan ilmoittamiseen sVAT_Rate ja vakiot iMax_Count. Tällä tavalla ilmoitettujen elementtien laajuus on koko nykyinen projekti.

Tämä tarkoittaa sitä että sVAT_Rate и iMax_Count on saatavilla missä tahansa projektimoduulissa.

Vaihtoehto Explicit Private sVAT_Rate As Single Private Const iMax_Count = 5000...    
Tässä esimerkissä muuttujan ilmoittaminen sVAT_Rate ja vakiot iMax_Count käytetty avainsana yksityinen. Näiden elementtien laajuus on nykyinen moduuli.

Tämä tarkoittaa sitä että sVAT_Rate и iMax_Count on käytettävissä kaikissa nykyisen moduulin menettelyissä, mutta ei ole käytettävissä muiden moduulien toimenpiteissä.

Jätä vastaus