Változók és állandók a VBA-ban

A VBA-ban, mint minden más programozási nyelvben, a változók és konstansok bármilyen értékek tárolására szolgálnak. Ahogy a neve is sugallja, a változók változhatnak, míg a konstansok rögzített értékeket tárolnak.

Például egy állandó Pi tárolja a 3,14159265 értéket… A „Pi” szám nem változik a program végrehajtása során, de mégis kényelmesebb egy ilyen értéket konstansként tárolni.

Ugyanakkor használhatjuk a változót sVAT_Rate a vásárolt áruk ÁFA kulcsának tárolására. Változó érték sVAT_Rate a vásárolt terméktől függően változhat.

Adattípusok

Minden változó és állandó egy adott adattípusú. Az alábbi táblázat felsorolja a VBA-ban használt adattípusokat a leírással és a lehetséges értékek tartományával:

Adattípus MéretLeírásÉrtéktartomány
Byte1 bytesPozitív egész számok; gyakran használják bináris adatokhoztól 0 a 255
logikai2 bytesLehet igaz vagy hamisIgaz vagy hamis
Egész szám2 bytesEgész számok (tört rész nélkül)-32 és +768 között
Hosszú4 bytesNagy egész számok (tört rész nélkül)от -2 147 483 648 до +2 147 483 647
egyetlen4 bytesEgyetlen pontosságú lebegőpontos szám-3.4e38-ról +3.4e38-ra
kettős8 bytesDupla pontosságú lebegőpontos szám-1.8e308-ról +1.8e308-ra
Valuta8 bytesLebegőpontos szám, fix számú tizedesjegyekkelот -922 337 203 685 477.5808 до +922 337 203 685 477.5807
találka8 bytesDátum és idő – A Dátum típusú adatokat egy lebegőpontos szám jelöli. Ennek a számnak az egész része a dátumot, a tört része pedig az időt fejezi ki.1. január 100-től 31. december 9999-ig
tárgy4 bytesObjektum hivatkozásBármilyen objektum hivatkozás
HúrváltozikKarakterkészlet. A String típus lehet fix vagy változó hosszúságú. Gyakrabban használt változó hosszúságúFix hosszúság – legfeljebb körülbelül 65 karakter. Változó hosszúságú – körülbelül 500 milliárd karakterig
VáltozatváltozikTartalmazhat dátumot, lebegőpontot vagy karakterláncot. Ezt a típust olyan esetekben használják, amikor nem ismert előre, hogy milyen típusú adatokat kell megadni.Szám – Dupla, string – String

Nyilvánvalóan a fenti táblázat használatával és a megfelelő adattípus kiválasztásával gazdaságosabban használhatja a memóriát (például válassza ki az adattípust Egész szám helyette Hosszú or egyetlen helyette kettős). Kompaktabb adattípusok használatakor azonban ügyelni kell arra, hogy a kód ne próbáljon meg aránytalanul nagy értékeket beleilleszteni.

Változók és állandók deklarálása

A fordító megjegyzése: Ha a VBA változóiról beszélünk, érdemes még egy nagyon fontos pontot megemlíteni. Ha deklarálunk egy változót, de nem adunk hozzá értéket, akkor az alapértelmezett értékkel inicializálódik:

• a szöveges karakterláncok üres karakterláncokkal inicializálódnak;

• számok — érték 0;

• típusváltozók logikai - Hamis;

• dátumok – 30. december 1899.

Mielőtt egy változót vagy állandót használhatnánk, deklarálni kell. Ehhez adja hozzá a következő egyszerű kódsort a makróhoz:

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

A fenti kódsorban Változó_neve a kódban használt változó neve, és Adattípus a cikkben kicsit korábban megadott táblázat egyik adattípusa. Például:

Dim sVAT_Rate As Single Dim i As Integer

A konstansok deklarálása hasonlóan történik, de az állandók deklarálásakor azonnal fel kell tüntetni az értéküket. Például így:

Állandó iMaxCount = 5000 Állandó iMaxScore = 100

Nem szükséges a változókat Excelben deklarálni. Alapértelmezés szerint az Excelben minden megadott, de nem deklarált változó típusa lesz Változat és képes lesz numerikus és szöveges értékeket is elfogadni.

Így a programozó bármikor használhatja az új változót (akkor is, ha nincs deklarálva), és az Excel egy típusú változóként kezeli. Változat. Azonban több oka is van annak, hogy miért nem szabad ezt megtenni:

  1. Memóriahasználat és számítási sebesség. Ha nem deklarál egy változót az adattípus megjelölésével, akkor alapértelmezés szerint a típus lesz beállítva Változat. Ez az adattípus több memóriát használ, mint más adattípusok. Változónként néhány plusz bájt nem hangzik soknak, de a gyakorlatban a programok több ezer változót is tartalmazhatnak (főleg, ha tömbökkel dolgoznak). Ezért az extra memória által használt változók, mint Változattípusú változókhoz képest Egész szám or egyetlen, akár jelentős összeget is elérhet. Ezen kívül műveletek típusú változókkal Változat sokkal lassabban hajtódnak végre, mint más típusú változókkal, illetve ezerrel több típusú változóval Változat jelentősen lelassíthatja a számításokat.
  2. Elírási hibák megelőzése a változónevekben. Ha minden változó deklarálva van, akkor a VBA utasítás használható − Explicit lehetőség (erről később lesz szó), hogy azonosítsuk az összes nem deklarált változót. Ez kiküszöböli a programban a hibásan írt változónév miatti hiba megjelenését. Például egy nevű változó használatával sVAT_Rate, akkor elgépelhet, és értéket adva ehhez a változóhoz a következőt írhatja: “VATRate = 0,175”. Várhatóan mostantól a változó sVAT_Rate tartalmaznia kell a 0,175 értéket – de természetesen nem. Ha az összes használt változó kötelező deklarálási módja engedélyezve van, akkor a VBA fordító azonnal hibát jelez, mivel nem találja meg a változót Áfakulcs a bejelentettek között.
  3. Olyan értékek kiemelése, amelyek nem egyeznek a változó deklarált típusával. Ha deklarálunk egy bizonyos típusú változót, és megpróbálunk hozzá más típusú adatokat rendelni, akkor hibaüzenetet kapunk, amit ha nem javítunk ki, a program összeomlását okozhatja. Első pillantásra ez jó oknak tűnhet arra, hogy ne deklaráljunk változókat, de valójában korábban kiderült, hogy az egyik változó rossz adatot kapott, mint amilyennek meg kellett volna – ez annál jobb! Ellenkező esetben, ha a program továbbra is fut, az eredmények hibásak és váratlanok lehetnek, és sokkal nehezebb lesz megtalálni a hibák okát. Az is lehetséges, hogy a makró „sikeresen” végrehajtásra kerül. Ennek eredményeként a hiba észrevétlen marad, és a munka hibás adatokkal folytatódik!

Ebben a tekintetben kívánatos a hibás adattípus észlelése és a kód ilyen hibáinak mielőbbi kijavítása. Ezen okok miatt ajánlatos az összes változót deklarálni VBA-makró írásakor.

Explicit lehetőség

Operátor Explicit lehetőség A VBA-kódban használt összes változót deklarálja, és az összes nem deklarált változót hibaként jelzi a fordítás során (a kódvégrehajtás megkezdése előtt). Ennek az operátornak az alkalmazása nem nehéz – csak írja be ezt a sort a VBA fájl legtetejére:

Option Explicit

Ha mindig be akarja szúrni Explicit lehetőség minden létrehozott új VBA-modul tetejére, ez automatikusan megtehető. Ehhez engedélyeznie kell az opciót Változó deklaráció szükséges a VBA szerkesztő beállításaiban.

Ez így történik:

  • A Visual Basic Editor menüben kattintson a gombra szerszámok > Opciók
  • A megjelenő párbeszédpanelen nyissa meg a lapot szerkesztő
  • Jelölje be a négyzetet Változó deklaráció szükséges és nyomja meg az OK

Ha engedélyezve van, a karakterlánc Explicit lehetőség automatikusan bekerül minden új modul elejére.

Változók és állandók köre

Minden deklarált változónak vagy állandónak megvan a maga korlátozott hatóköre, vagyis a program egy korlátozott része, amelyben ez a változó létezik. A hatókör attól függ, hogy hol történt a változó vagy állandó deklarációja. Vegyük például a változót sVAT_Rate, amelyet a függvényben használunk Összköltsége. A következő táblázat a változó hatókörének két lehetőségét tárgyalja sVAT_Ratekét különböző pozícióban deklarálva a modulban:

Opció Explicit Dim sVAT_Rate As Single Function Total_Cost() As Double ... Vége függvény
Ha a változó sVAT_Rate a modul legelején deklarálva, akkor ennek a változónak a hatóköre a teljes modul (azaz a változó sVAT_Rate ebben a modulban minden eljárás felismeri).

Ezért ha a függvényben Összköltsége változó sVAT_Rate kap valamilyen értéket, akkor az ugyanazon a modulon belül végrehajtott következő függvény a változót fogja használni sVAT_Rate ugyanazzal a jelentéssel.

Ha azonban egy másik modulban található függvényt hívunk meg, akkor annak a változót sVAT_Rate nem lesz ismert.

Opció Explicit függvény Total_Cost() As Double Dim sVAT_Rate As Single ... Funkció vége
Ha a változó sVAT_Rate a függvény elején deklarálva Összköltsége, akkor a hatóköre csak erre a függvényre korlátozódik (azaz a függvényen belül Összköltsége, használhatja a változót sVAT_Rate, de nem kívül).

Amikor megpróbálja használni sVAT_Rate egy másik eljárásban a VBA fordító hibát jelez, mert ezt a változót nem deklarálták a függvényen kívül Összköltsége (feltéve, hogy az operátort használják Explicit lehetőség).

A fenti példában a változó modulszinten van deklarálva a kulcsszóval Homályos. Szükséges lehet azonban, hogy a deklarált változókat más modulokban is fel lehessen használni. Ilyen esetekben kulcsszó helyett változó deklarálása Homályos kulcsszót kell használni nyilvános.

Egyébként azért, hogy a kulcsszó helyett egy változót deklaráljunk modul szinten Homályos kulcsszó használható Magán, ami azt jelzi, hogy ez a változó csak az aktuális modulban használható.

A konstansok deklarálásához kulcsszavakat is használhat. nyilvános и Magán, de nem a kulcsszó helyett const, vele együtt.

A következő példák a kulcsszavak használatát mutatják be nyilvános и Magán változókra és konstansokra alkalmazva.

Opció Explicit Public sVAT_Rate As Single Public Const iMax_Count = 5000 ...    
Ebben a példában a kulcsszó nyilvános változó deklarálására szolgál sVAT_Rate és állandók iMax_Count. Az így deklarált elemek köre a teljes aktuális projekt lesz.

Ez azt jelenti, hogy sVAT_Rate и iMax_Count bármely projektmodulban elérhető lesz.

Opció Explicit Private sVAT_Rate As Single Private Const iMax_Count = 5000 ...    
Ebben a példában egy változó deklarálásához sVAT_Rate és állandók iMax_Count használt kulcsszó Magán. Ezen elemek hatóköre az aktuális modul.

Ez azt jelenti, hogy sVAT_Rate и iMax_Count elérhető lesz az aktuális modul összes eljárásában, de nem lesz elérhető más modulok eljárásaiban.

Hagy egy Válaszol