Transcript VBA5ea

Pénzügyi feladatok
VBA támogatása
5. előadás
Barna Róbert
KE GTK
Informatika Tanszék
Globális és modális (modul szintű)
deklarációk
A modul- és a kódlapok alapértelmezésben nyilvánosak
(Public).
A globálisnak deklarált konstansok és változók
programozási szinten elérhetők a munkafüzet minden
modul- és kódlapjáról.
A rutinok alapértelmezésben szintén nyilvánosak.
Pénzügyi feladatok VBA támogatása – 5. előadás
3 / 35
Globális és modális (modul szintű)
deklarációk
A kódlapok deklarációs részében nem lehet a
konstansokat, a fix hosszúságú karakterláncokat és a
tömböket globálissá tenni, azaz Public kulcsszóval
deklarálni.
Pénzügyi feladatok VBA támogatása – 5. előadás
4 / 35
Globális és modális (modul szintű)
deklarációk
Egy modullap aktiválásakor (amikor a modullap egy rutinját
első alkalommal meghívjuk) a globális és a modális
konstansok megkapják értéküket, továbbá a VBA a
típusuknak megfelelő kezdő értékkel feltölti (inicializálja) az
összes globális és modális változót is.
Ezután mind a konstansok, mind a változók megőrzik
értéküket mindaddig, amíg a modullap nyitott állományban
van.
Pénzügyi feladatok VBA támogatása – 5. előadás
5 / 35
A modullap alapértelmezéseinek
beállítása
Az alapértelmezett beállítások a tömbök kezdőindexét, a
karakterláncok összehasonlítási módját, a változók
deklarálási kényszerét, illetve alapértelmezett típusát
határozzák meg.
Ha elfogadjuk a rendszer beállításait, nincs semmi
teendőnk.
Az ún. direktívák a fordítót utasítják, hogy milyen
alapbeállításokat használjon.
Mit érdemes elfogadni és mit kellene megváltoztatni?
Pénzügyi feladatok VBA támogatása – 5. előadás
6 / 35
A modullap alapértelmezéseinek
beállítása
Option Base 1
A tömbök alsó határát nem kötelező megadni.
Ha csak a felső határt adjuk meg, az alsó határ
alapértelmezésben 0, a direktíva hatására 1 lesz.
(Más értékek nem választhatók.)
Mivel az Excelben a tartományok indexelése 1-gyel indul,
célszerű a tömbök indexelését a rutinokban is 1-től indítani.
A továbbiakban ezt az értelmezést tekintjük érvényesnek!
Pénzügyi feladatok VBA támogatása – 5. előadás
7 / 35
A modullap alapértelmezéseinek
beállítása
Option Compare {Binary | Text}
Karakterláncok, illetve karakterláncokat tartalmazó változók
összehasonlításakor alapértelmezés szerinti bináris
módban a kis- és a nagybetűk különbözőek, szöveges
módban nem.
A továbbiakban megtartjuk az alapértelmezést, és a bináris
összehasonlítási módot tekintjük érvényesnek!
Pénzügyi feladatok VBA támogatása – 5. előadás
8 / 35
A modullap alapértelmezéseinek
beállítása
Option Explicit
A VBA nyelv a rutinokban implicit deklarációval dolgozik!
Amikor egy utasításban addig nem definiált
karaktersorozatot észlel, azt új változó neveként értelmezi,
és automatikusan felveszi a változók névlistájába.
Pénzügyi feladatok VBA támogatása – 5. előadás
9 / 35
A modullap alapértelmezéseinek
beállítása
Option Explicit
Lehet, hogy csak elvétettük egy billentyű leütését, és így a
szándékunk ellenére született új változó megváltoztatja a
rutin értelmét, vagyis kellemetlen szemantikai hiba
keletkezik, amelyet nehéz megtalálni.
Többe kerül a leves, mint a hús:
Az implicit deklaráció nyújtotta kényelem nem arányos az
ebből fakadó esetleges hibák megkeresésének
kényelmetlenségével.
Pénzügyi feladatok VBA támogatása – 5. előadás
10 / 35
A modullap alapértelmezéseinek
beállítása
Option Explicit
Az elírásokból, valamint a többszörös névhasználatból
adódó hibák könnyebb kiszűrése végett példáinkban
minden modul- és kódlapon szerepel a fenti direktíva.
Hatására kötelezővé válik az explicit deklaráció, vagyis a
konstansokat és a változókat használatuk előtt deklarálni
kell.
Pénzügyi feladatok VBA támogatása – 5. előadás
11 / 35
A modullap alapértelmezéseinek
beállítása
Option Explicit állandó használata!
A munkafüzet megnyitásakor váltsunk VB-nézetbe, és az
Eszközök [Tools] menü Egyebek [Option] almenüvel
megnyitható panelen a Szerkesztő [Editor] fülön aktiváljuk
a Változó deklarálása szükséges [Require Variable
Deciaration] kijelölőt.
Ezt követően a VBA automatikusan generálja az
Option Explicit direktívát minden újonnan létrehozott
modul- és kódlapon.
A már létezők beállítása nem változik meg.
Pénzügyi feladatok VBA támogatása – 5. előadás
12 / 35
A modullap alapértelmezéseinek
beállítása
Option Private Module
A modulok és a rutinok alapértelmezésben nyilvánosak.
E-nézetben egy nyitott munkafüzet makrói bármelyik másik
megnyitott munkafüzetből elérhetők.
Ha valamilyen okból titkolni akarjuk más felhasználók elől
rutinjainkat, a Private kulcsszóval zároljuk azt a
modullapot, amelyen elhelyezkednek.
Pénzügyi feladatok VBA támogatása – 5. előadás
13 / 35
A modullap alapértelmezéseinek
beállítása
Option Private Module
A direktíva hatására az egész modul mindenestül zárttá
válik más munkafüzetek számára.
Globális deklarációit és rutinjait csak az aktuális
munkafüzetből lehet elérni.
A direktívának gyakorlati jelentősége csak többfelhasználós
rendszerekben van.
Pénzügyi feladatok VBA támogatása – 5. előadás
14 / 35
A modullap alapértelmezéseinek
beállítása
Defrnév betű[-betű]
A direktíva célja a változók alapértelmezett típusának
beállítása.
Az rnév egy létező beépített típus rövid neve kell legyen.
A direktíva csak modullapon szerepelhet, és hatása is csak
az aktuális modullapra vonatkozik.
Pénzügyi feladatok VBA támogatása – 5. előadás
15 / 35
A modullap alapértelmezéseinek
beállítása
Defrnév betű[-betű]
Alapértelmezésben a típusnév nélkül deklarált változók
automatikusan Variant típusúak lesznek.
Lehet olyan feladat is, amelyben sokkal gyakoribb egy
másik változótípus.
Pénzügyi feladatok VBA támogatása – 5. előadás
16 / 35
A modullap alapértelmezéseinek
beállítása
Defrnév betű[-betű]
Ha kiadjuk ezt a direktívát, és egy típus nélküli változó
nevének kezdőbetűje megegyezik a direktívában megadott
betűvel, vagy a megadott tartományba esik (a határokat is
beleértve), akkor típusa a megfelelő egyszerű típus lesz.
A konkrét típussal rendelkező változók természetesen
ebben az esetben is bármilyen más típusúak lehetnek.
Pénzügyi feladatok VBA támogatása – 5. előadás
17 / 35
A modullap alapértelmezéseinek
beállítása
Defrnév betű[-betű]
A betű(tartomány) előírásánál nincs különbség kis- és
nagybetűk között. Az A-Z tartomány lefoglalja az egész
ábécét egy típus számára.
Ekkor újabb típusbeállításra már nincs lehetőség, és ez az
ékezetes betűkkel kezdődő nevekre is vonatkozik.
Pénzügyi feladatok VBA támogatása – 5. előadás
18 / 35
A modullap alapértelmezéseinek
beállítása
Defrnév betű[-betű]
Példa:
DefInt I-K
A direktíva hatására minden típus nélküli változó,
amelynek neve i, j vagy k betűvel kezdődik,
automatikusan Integer (egész) típusú lesz.
DE bármilyen más típusúnak deklarálhatjuk a kutya nevű
változót!
Pénzügyi feladatok VBA támogatása – 5. előadás
19 / 35
Konstansok dekIaráIása
A konstansok állandó adatokat tartalmaznak.
Logikailag a konstans nem változtatható értékű változó.
Nem érdemes megpróbálni változtatni egy konstans
értékét, mert futási hibát okoz, ami a rutin futásának
megszakítását eredményezi.
Pénzügyi feladatok VBA támogatása – 5. előadás
20 / 35
Konstansok dekIaráIása
{Public | Private} Const konstnév [As tipusnév]
= kifejezés
A globális (Public) konstansok az alkalmazás minden
modul- és kódlapjáról elérhetők de ilyeneket csak
modullapon lehet deklarálni, kódlapon nem!
A Private kulcsszóval az aktuális modullapra korlátozzuk
egy konstans használatát (modális deklaráció).
Pénzügyi feladatok VBA támogatása – 5. előadás
21 / 35
Konstansok dekIaráIása
{Public | Private} Const konstnév [As tipusnév]
= kifejezés
Egyik kulcsszó megadása sem kötelező.
Ha nem adunk meg kulcsszót, a konstans alapértelmezés
szerint modális lesz.
A jobb áttekintés végett mindig, írjuk ki az alapértelmezett
deklarációkat is!
„Abból még nem volt baj, hogy a sorompó le volt engedve!”
Pénzügyi feladatok VBA támogatása – 5. előadás
22 / 35
Konstansok dekIaráIása
{Public | Private} Const konstnév [As tipusnév]
= kifejezés
A konstans típusát nem kell megadni!
A VBA automatikusan illeszti az adattartalomhoz.
A jobb olvashatóság, vagy nagyobb pontosság elérés
indokolhatja, hogy kiírjuk.
Pénzügyi feladatok VBA támogatása – 5. előadás
23 / 35
Konstansok dekIaráIása
Lehetséges konstanst Variant típusúnak deklarálni!
Ennek semmi értelme, hiszen egy konstans típusa fixen
igazodik a tartalmához, és futás közben nem változtatható.
Egy sorban - lista-elválasztóval - több konstans is
deklarálható.
A kifejezésekben előzőleg deklarált konstansok is
használhatók; körkörös (önmagára vonatkozó) hivatkozás
természetesen nem megengedett.
Pénzügyi feladatok VBA támogatása – 5. előadás
24 / 35
Konstansok dekIaráIása
Szövegkonstanst (például állomány, munkalap stb. nevét)
mindig idézőjelek (“ “) közé kell tenni.
A beépített Excel-konstansok neve „xl”, a Visual Basic
konstansoké „vb” karakterekkel kezdődik.
Pénzügyi feladatok VBA támogatása – 5. előadás
25 / 35
Változók dekIaráIása
A programokban a változóknak pontosan az a szerepük,
ami az algebrai kifejezésekben.
A változóknak a program futása során adott értéket a
műveletekben használjuk, de természetesen meg is
változtathatjuk.
Pénzügyi feladatok VBA támogatása – 5. előadás
26 / 35
Változók dekIaráIása
{Public|Private|Dim} név1 [As típusnév1]
[‚ név2 [As típusnév2]...]
A három kulcsszó közül egyet kell megadni.
A Public kulcsszóval deklarált globális változók elérhetők
más modullapokról.
A Private vagy Dim kulcsszóval deklarált modális
változók csak az aktuális modullapon léteznek.
A Private és Dim kulcsszó hatása egyenértékű.
A globális <=> modális kontraszt kiemelése érdekében a
Private javasolt.
Pénzügyi feladatok VBA támogatása – 5. előadás
27 / 35
Változók dekIaráIása
{Public|Private|Dim} név1 [As típusnév1]
[‚ név2 [As típusnév2]...]
Ha egy kulcsszó után egynél több változónevet sorolunk
fel, ezeket vesszővel kell elválasztani.
Minden egyes változónak külön kell definiálni a típusát!
Típus nélküli változó nem létezik: a típusnév elhagyása
esetén az alapértelmezett (Variant) típusú lesz.
Pénzügyi feladatok VBA támogatása – 5. előadás
28 / 35
Változók dekIaráIása
Egy modullapon a konstansok, a változók és a rutinok
nevének különbözőnek kell lennie.
Az esetleges névütközések elkerülése érdekében más
modullapon deklarált programelemekre az
[állománynév] modulnév ! változónév
szintaxis szerint kell hivatkozni.
Ebben az esetben a [] zárójelpárt ki kell tenni, itt nem
választható adatot jelöl!
Pénzügyi feladatok VBA támogatása – 5. előadás
29 / 35
Saját (felhasználói) típusok
deklarálása
Adódhatnak olyan összetettebb feladatok, amelyek
megoldása éppen attól válik egyszerűbbé, hogy
bonyolultabb, összetett adatszerkezetekkel dolgozunk.
Ezeket saját vagy felhasználói típusoknak nevezzük.
Mivel a VBA „magától” nem ismeri fel, az ilyen típusokat
alkalmazásuk előtt természetesen dekiarálnunk kell.
Egy személyzeti nyilvántartás például nyilvánvalóan
áttekinthetőbb lesz, ha egy munkatárs minden adatát
egyetlen azonosítóval, esetleg éppen a nevével lehet
elérni.
Pénzügyi feladatok VBA támogatása – 5. előadás
30 / 35
Saját (felhasználói) típusok
deklarálása
Type éntípusom
saját_váltnév1 As típusnév
saját_váltnév2 As típusnév
End Type
Saját típusok kialakításához kell egy kis programozói
gyakorlat (meg némi érzék is).
(C nyelvben struct, Pascal nyelvben record)
A továbbiakban csak a beépített típusokat fogjuk használni.
Pénzügyi feladatok VBA támogatása – 5. előadás
31 / 35
Saját (felhasználói) típusok
deklarálása
Type éntípusom
saját_váltnév1 As típusnév
saját_váltnév2 As típusnév
End Type
A típusdeklaráció belsejében típusnévként mind beépített,
mind előzőleg már deklarált saját típusok neve használható, akár egyszerű típus, akár fix vagy dinamikus tömb
formában.
Típusdeklarációk tetszőleges mélységben egymásba
ágyazhatók, de a típus teljes mérete nem lehet több 65 535
bájtnál.
Pénzügyi feladatok VBA támogatása – 5. előadás
32 / 35
Saját (felhasználói) típusok
deklarálása
Type éntípusom
saját_váltnév1 As típusnév
saját_váltnév2 As típusnév
End Type
A típusdeklaráció mindig globális => csak modullapon
adható meg.
A saját típus természetesen bármilyen szintű változó- vagy
konstansdeklarációban használható típusnévként.
Dim teszt As éntípusom
Pénzügyi feladatok VBA támogatása – 5. előadás
33 / 35
Saját (felhasználói) típusok
deklarálása
Type éntípusom
saját_váltnév1 As típusnév
saját_váltnév2 As típusnév
End Type
Az összetett típusok belső elemeire úgy kell hivatkozni,
hogy a típusnévhez ponttal kapcsoljuk a belső
változónevet.
Pl. az én_típusom típusú teszt nevű változó saját
váltnév2 nevű elemének étékadása:
teszt.saját_váltnév2 = 2
Pénzügyi feladatok VBA támogatása – 5. előadás
34 / 35
Köszönöm a figyelmet!
Folyt köv.
Pénzügyi feladatok VBA támogatása – 5. előadás
35 / 35