Barna Róbert KE GTK Informatika Tanszék Pénzügyi feladatok VBA támogatása 8. előadás
Vezérlő utasítások Ugró utasítások Tilos! Kivéve a hibakezelést. Ha a rutin elején (de mindenesetre a hibát eredményező utasítássor előtt) kiadjuk az On Error Goto címke hibakezelő utasítást, akkor futási hiba esetén a vezérlés a rutinon belüli címkét tartalmazó (ha ez üres, a következő) sorra kerül, ahol a saját hibaelemző utasításcsoport található. Pénzügyi feladatok VBA támogatása – 8. előadás3 /45
Vezérlő utasítások Ugró utasítások Címke: Sor elején álló [ ] intervallumba eső sorszám, vagy betűkből és számokból álló, kettősponttal lezárt tetszőleges karaktersorozat. Pénzügyi feladatok VBA támogatása – 8. előadás4 /45
Vezérlő utasítások Ugró utasítások A hibaelemző utasításcsoportból a Resume illetve Resume Next utasítással térhetünk vissza a hibát okozó, illetve az azt követkő utasításra. Pénzügyi feladatok VBA támogatása – 8. előadás5 /45
Vezérlő utasítások Megszakító utasítások A rutinok futását két utasítással tudjuk megszakítani: Stop: felfüggeszti az aktuális rutin futását és megszakított üzemmódot állít be, amelyben lehetőség van a nyomkövetésre; End: befejezi a program futását. Pénzügyi feladatok VBA támogatása – 8. előadás6 /45
Vezérlő utasítások Megszakító utasítások Mindkét utasítást csak a belövés során szabad használni! Mindkettő hátránya, hogy fixen a programban marad, a hibátlan változatból el kell távolítani. Pénzügyi feladatok VBA támogatása – 8. előadás7 /45
Vezérlő utasítások Megszakító utasítások Megszakított üzemmód beállítására célszerűbb töréspontokat elhelyezni, mert ezek törlődnek, amikor az állományt bezárjuk. A töréspont egy kijelölt programsor, amelynek elérésekor felfüggesztődik a makró futása, de kézzel tovább indítható. Pénzügyi feladatok VBA támogatása – 8. előadás8 /45
Vezérlő utasítások Rutinhívó utasítások A rutinhívás egy rutin aktiválását, vagyis elindítását és lefuttatását jelenti, amikor is meg kell adni a rutinfejben deklarált formális paramétereknek megfelelő aktuális paramétereket Pénzügyi feladatok VBA támogatása – 8. előadás9 /45
Vezérlő utasítások Rutinhívó utasítások A VBA számára minden munkafüzet egy projekt. A VBA létrehozáskor minden objektumnak automatikusan ad egy hivatkozási nevet (Name), amely utal az objektum típusára, és tartalmaz egy egyedi sorszámot. Ezen kívül a legtöbb objektumnak van felirata (Caption) is, amelyet a továbbiakban „becenév”-ként fogunk említeni. (adatázisban a mezőnek neve és címe van) Pénzügyi feladatok VBA támogatása – 8. előadás10 /45
Vezérlő utasítások Rutinhívó utasítások Például a munkafüzet lapjainak hivatkozási neve Munkan [Sheetn], ahol n egyedi sorszám. Induláskor, illetve beszúráskor ez egyben a munkalapok beceneve is. A munkafüzetek kivételek: mindegyikük hivatkozási neve VBAProjekt és becenévként zárójelben az állománynevük szerepel. Pénzügyi feladatok VBA támogatása – 8. előadás11 /45
Vezérlő utasítások Rutinhívó utasítások Az objektumokat a rutinokban hivatkozási nevükkel (Name) azonosítjuk. Amikor azonban az objektumokat megjelenítjük, nem ezt látjuk, hanem a becenevüket (Caption). Pénzügyi feladatok VBA támogatása – 8. előadás12 /45
Vezérlő utasítások Rutinhívó utasítások Az objektumokat a rutinokban hivatkozási nevükkel (Name) azonosítjuk. Amikor azonban az objektumokat megjelenítjük, nem ezt látjuk, hanem a becenevüket (Caption). VB-nézetben, az objektum kijelölése után mindkét nevet tetszőlegesen megváltoztathatjuk a Tulajdonságok [Properties] ablakban. Pénzügyi feladatok VBA támogatása – 8. előadás13 /45
Vezérlő utasítások Rutinhívó utasítások Eljárás hívása: [projektnév.][objektumnév.] eljárásnév [a_parlista] Call [projektnév.][objektumnév.] eljárásnév [(a_parlista)] Pénzügyi feladatok VBA támogatása – 8. előadás14 /45
Vezérlő utasítások Rutinhívó utasítások Eljárás hívása: Eljárásokat egyszerűen nevük leírásával vagy Call kulcsszóval lehet meghívni. Pénzügyi feladatok VBA támogatása – 8. előadás15 /45
Vezérlő utasítások Rutinhívó utasítások Eljárás hívása: Ha csak nevével hívjuk meg az eljárást: az aktuális paramétereket csak fel kell sorolni (sorrend és típus betartásával!); ilyenkor a zárójeleket tilos kitenni; ha az eljárásnak nincs formális paramétere, tilos kitenni az „üres” zárójelpárt. Pénzügyi feladatok VBA támogatása – 8. előadás16 /45
Vezérlő utasítások Rutinhívó utasítások Eljárás hívása: Ha az eljárást Call kulcsszóval hívjuk: a paraméterlistát kötelező zárójelbe tenni; ha az eljárásnak nincs formális paramétere, az „üres” zárójelpárt ki lehet tenni, de a VBE (Visual Basic Editor) automatikusan letörli. Pénzügyi feladatok VBA támogatása – 8. előadás17 /45
Vezérlő utasítások Rutinhívó utasítások Függvény hívása: {[változánév =|Call]} [projektnév.] [objektumnév.]függvénynév[(a_parlista)] Pénzügyi feladatok VBA támogatása – 8. előadás18 /45
Vezérlő utasítások Rutinhívó utasítások Függvény hívása: Ha függvényként kívánjuk aktiválni, a függvény névnek értékadó utasítás jobb oldalán vagy kifejezés tényezőjeként kell szerepelnie és az aktuális paraméterlistát zárójelek között kell felsorolni; ha a függvénynek nincs formális paramétere, az „üres” zárójelpárt ki lehet tenni, de a VBE automatikusan letörli. Pénzügyi feladatok VBA támogatása – 8. előadás19 /45
Vezérlő utasítások Rutinhívó utasítások Függvény hívása: Ha egy függvényt Call kulcsszóval hívunk meg, az eljáráshívási szabályokat kell alkalmazni. Ilyenkor a függvény eljárásként működik, és visszatérési értéke elveszik. Pénzügyi feladatok VBA támogatása – 8. előadás20 /45
Vezérlő utasítások Rutinhívó utasítások Mivel a rutinok alapértelmezésben nyilvánosak ( Public ), az egy munkafüzetben levő, vagyis egy projekthez tartozó rutinok „látják” egymást. Így hívásukkor az objektumnév elhagyható; természetesen csak akkor, ha a munkafüzetben minden rutinnak egyedi neve van. Különböző modul- és kódlapokon levő, azonos nevű rutinok hívásakor meg kell adni a rutint tartalmazó objektum (modul-, illetve munkalap vagy párbeszédlap) hivatkozási nevét is. Pénzügyi feladatok VBA támogatása – 8. előadás21 /45
Vezérlő utasítások Rutinhívó utasítások Más projekthez tartozó (másik munkafüzetben levő) rutint csak akkor lehet meghívni, ha az aktív munkafüzet hivatkozási kapcsolatban van a meghívandó rutint tartalmazóval. Pénzügyi feladatok VBA támogatása – 8. előadás22 /45
Vezérlő utasítások Rutinhívó utasítások Ilyen kapcsolatot VB-nézetben a Hivatkozások [References] ablakban (Eszközök→Hivatkozások [Tools→ References] menü) lehet létrehozni úgy, hogy a Létező hivatkozások [Available References] listamezőben bekapcsoljuk a kívánt állomány neve melletti kijelölőt. Nem lehet természetesen hozzáférni olyan rutinokhoz, amelyek Option Private Module direktívával védett modullapokon vannak. Pénzügyi feladatok VBA támogatása – 8. előadás23 /45
Vezérlő utasítások Pénzügyi feladatok VBA támogatása – 8. előadás24 /45
Vezérlő utasítások Rutinhívó utasítások Nem lehet természetesen hozzáférni olyan rutinokhoz, amelyek Option Private Module direktívával védett modullapokon vannak. Ha a keresett állománynév nem látható, a Tallózás [Browse] gomb segítségével kell megkeresni, és felvenni a listába. A listában szereplő egyéni állományneveket úgy lehet eltüntetni, hogy töröljük a saját kijelölőjüket, és így zárjuk be a rájuk hivatkozó állományt. Pénzügyi feladatok VBA támogatása – 8. előadás25 /45
Vezérlő utasítások Rutinhívó utasítások Szögletes zárójelbe kell tenni a hivatkozási neveket, ha betűkön, számokon és alsó kötőjeleken kívül más karaktereket (például pontot) is tartalmaznak! Egyébként ez a szögletes zárójel kiírható, de el is hagyható. (Nem összetévesztendő a [nem kötelező] megadásával.) Pénzügyi feladatok VBA támogatása – 8. előadás26 /45
Vezérlő utasítások Rutinhívó utasítások Ha a rutin neve egyedi az egész alkalmazásban, hívásakor sem a projektnevet, sem az objektumnevet nem kell kiírni; ha saját munkafüzetében egyedi, elegendő a projektnév kiírása; különben mindkét nevet meg kell adni, szükség esetén szögletes zárójelben. Pénzügyi feladatok VBA támogatása – 8. előadás27 /45
Vezérlő utasítások Rutinhívó utasítások Ha megváltoztatjuk egy állomány nevét, ettől a projekt hivatkozási neve nem változik meg, a rutinjaira vonatkozó külső hívások érvényben maradnak. Ha azonban a Tulajdonságok [Properties] ablakban átírjuk a hivatkozási nevet, ezt a VBE a rutinokban nem követi; s természetesen ugyanez érvényes a modul-, munka- és párbeszédlapok nevére is. Ezért kerülni kell a közvetlen név-hivatkozásokat; más szóval használjunk egyedi rutinneveket. Pénzügyi feladatok VBA támogatása – 8. előadás28 /45
Vezérlő utasítások Rutinhívó utasítások Programozási szempontból a metódusok is rutinok, ezért a rutinhívási szabályok rájuk is érvényesek! Lehetne, mégsem szokás ezeket Call kulcsszóval meghívni. Az eljárás-metódusokat rendszerint nevük leírásával aktiváljuk, a függvény-metódusok pedig legtöbbször értékadó kifejezés jobboldalán szerepelnek. Az első esetben tilos, a másodikban kötelező zárójelek között megadni a paramétereIket ha ilyenek vannak. Pénzügyi feladatok VBA támogatása – 8. előadás29 /45
Vezérlő utasítások Rutinhívó utasítások Egy eljárást a GoSub eljárásnév utasítással is lehet aktiválni. Ez esetben a hívott eljárásból Return utasítással kell kilépni. Mivel ez a mód idegen a moduláris programozástól, nem használjuk. Pénzügyi feladatok VBA támogatása – 8. előadás30 /45
Vezérlő utasítások Rutinhívó utasítások Paraméter-átadás: Az aktuális paraméterlista ( a_parlista ) változók és/vagy kifejezések vesszővel elválasztott felsorolása. Itt és a továbbiakban kifejezésen az eddigieken túlmenően tulajdonságokat is értünk. Pénzügyi feladatok VBA támogatása – 8. előadás31 /45
Vezérlő utasítások Rutinhívó utasítások Paraméter-átadás (emlékeztető): Az aktuális paraméterek számának és típusának - a megfelelő sorrendben - általában meg kell egyeznie a formális paraméterekével. (E tekintetben mindegy, hogy a formális paraméterek ByRef vagy ByVal módúak-e.) Az Optional, illetve a Paramarray kulcsszóval deklarált formális paraméterek kivételek (később részletesebben). Pénzügyi feladatok VBA támogatása – 8. előadás32 /45
Vezérlő utasítások Rutinhívó utasítások Paraméter-átadás: Ha a formális paraméterre nevével hivatkozunk az fparnév := kifejezés szintaxis szerint, akkor a hívási sorrend közömbös. Általában így járunk el a metódusoknál mivel sok paraméterük lehet, és ezek sorrendjét nem ismerjük mindig pontosan. Pénzügyi feladatok VBA támogatása – 8. előadás33 /45
Vezérlő utasítások Rutinhívó utasítások Ha a formális paraméter Variant típusú, a megfelelő aktuális paraméter bármilyen típusú kifejezés, karakterlánc vagy (akár több dimenziós) tömb is lehet; az utóbbi esetben a sorok elemeit vessző, a sorokat pontosvessző választja el. Pénzügyi feladatok VBA támogatása – 8. előadás34 /45
Vezérlő utasítások Rutinhívó utasítások Az elvárt egyezéseket a fordító ellenőrzi. Ha a formális és az aktuális paraméter típusa nem egyezik meg, azt a fordító jelzi. A típusváltást kikényszeríthetjük úgy, hogy az aktuális paramétert zárójelbe tesszük. Ám ha a típusok nem illeszthetők, szintaktikai hiba keletkezik. Pénzügyi feladatok VBA támogatása – 8. előadás35 /45
Vezérlő utasítások Rutinhívó utasítások A fordító a futás során (majd) keletkező túlcsordulásokat (előre) nem tudja kezelni! Ha például egy Byte típusú formális paraméterre rákényszerítettünk egy Long típusú aktuális paramétert, és futáskor az utóbbi értéke kívül esik a byte határokon, rutinunk futási hibával elakad. Pénzügyi feladatok VBA támogatása – 8. előadás36 /45
Vezérlő utasítások Rutinhívó utasítások Az optional kulcsszóval deklarált, feltételes formális paraméterek helyén nem kötelező aktuális paramétert megadni. Előfordulásukat a rutinban az IsMissing (fparnév) függvénnyel lehet vizsgálni, amely True logikai értéket ad, ha az aktuális paraméter hiányzik. Pénzügyi feladatok VBA támogatása – 8. előadás37 /45
Vezérlő utasítások Rutinhívó utasítások A ParamArray kulcsszóval tömbnek deklarált formális paraméter esetében mivel a hozzá tartozó aktuális paraméterek száma retszőleges. A kötelezően Variant típusú formális tömböt ebben az esetben valamelyik For ciklussal lehet feldolgozni. Erre kétféle módszer kínálkozik: Pénzügyi feladatok VBA támogatása – 8. előadás38 /45
Vezérlő utasítások Rutinhívó utasítások Ha egydimenziós tömböt várunk, a For cv = 1 To Ubound(formális tömb) ciklusban a formális_tömb (cv) szimbólummal lehet egyenként előhívni a tömbelemeket. Az Ubound függvény ugyanis visszaadja a megadott aktuális tömb felső határát. Pénzügyi feladatok VBA támogatása – 8. előadás39 /45
Vezérlő utasítások Rutinhívó utasítások A tömb dimenziószámától függetlenül, mindig előhívhatók az elemei a For Each elem In formális tömb ciklussal, amelyben a lokálisan deklarált, Variant típusú elem változó rendre (sorfolytonosan) felveszi az aktuális tömb elemeinek értékét. Pénzügyi feladatok VBA támogatása – 8. előadás40 /45
Vezérlő utasítások Rutinhívó utasítások Függvény visszatérési értéke A függvény típusát (visszatérési értékének típusát) deklarálásakor kellett, illetve lehetet megadni As kulcsszóval; ha ez nem történt meg, az alapértelmezett típust vette fel. Pénzügyi feladatok VBA támogatása – 8. előadás41 /45
Vezérlő utasítások Rutinhívó utasítások Függvény visszatérési értéke A függvény-rutin törzsében legalább egy olyan értékadó utasításnak kell szerepelnie, amelynek bal oldalán a függvény neve áll. Ha a futás során egyetlen ilyen utasítás sem hajtódik végre, a függvény a típusától függő „üres” kezdőértékkel tér vissza. Pénzügyi feladatok VBA támogatása – 8. előadás42 /45
Vezérlő utasítások Rutinhívó utasítások Függvény visszatérési értéke A String típusú függvény karakterláncot ad vissza, amelynek legnagyobb hossza 255 karakter. A Variant típusú függvény visszatérési értéke bármilyen típusú változó (akár String is) lehet, de amit más típusok nem „tudnak”: bármilyen típusú tömb vagy hibaérték is megengedett. Pénzügyi feladatok VBA támogatása – 8. előadás43 /45
Vezérlő utasítások Rutinhívó utasítások Függvény visszatérési értéke Ha nincs szükség a visszaadott értékre, a függvények ( Call kulcsszóval) eljárásként is meghívhatók, az eljárásokra vonatkozó hívási és paraméterátadási szabályok szerint. Pénzügyi feladatok VBA támogatása – 8. előadás44 /45
Köszönöm a figyelmet! Folyt köv.