Az előadás letöltése folymat van. Kérjük, várjon

Az előadás letöltése folymat van. Kérjük, várjon

Pénzügyi feladatok VBA támogatása Barna Róbert KE GTK

Hasonló előadás


Az előadások a következő témára: "Pénzügyi feladatok VBA támogatása Barna Róbert KE GTK"— Előadás másolata:

1

2 Pénzügyi feladatok VBA támogatása Barna Róbert KE GTK
9. előadás Barna Róbert KE GTK Informatika Tanszék

3 Pénzügyi feladatok VBA támogatása Barna Róbert KE GTK
9. előadás Barna Róbert KE GTK Informatika Tanszék

4 Pénzügyi feladatok VBA támogatása – 9. előadás
Hibakezelés Kézi megszakítás esetén - vagy ha futási hiba keletkezik - a VBA hibaüzenetet ír ki és megszakított módban leáll. Az ilyenkor megjelenő Microsoft Visual Basic feliratú ablakban a hiba kódján és a hibaüzenet szövegén kívül négy nyomógomb is látható; ezekkel a következőket művelhetjük: Pénzügyi feladatok VBA támogatása – 9. előadás 4 /41

5 Pénzügyi feladatok VBA támogatása – 9. előadás
Hibakezelés 1. Ha a VÉGE [End] gombra kattintunk vagy leütjük az Esc billentyűt, befejeződik a rutin futása, és a kurzor az utoljára aktivált munkalap aktív cellájára áll. 2. A TOVÁBB [Continue] gomb csak kézi megszakítás esetén látható; ha erre kattintunk, a rutin változtatás nélkül továbbfut. Pénzügyi feladatok VBA támogatása – 9. előadás 5 /41

6 Pénzügyi feladatok VBA támogatása – 9. előadás
Hibakezelés 3. A HIBAKERESÉS [Debug] gomb hatására a VBA a hibás programsorra pozicionálja a kurzort, és megszakított módban marad. Ilyenkor a próbafuttatásokkal kapcsolatosan fentebb ismertetett tevékenységeket végezhetjük. 4. A SÚGÓ [Help] gomb lenyomására részletesebb tájékoztatást kapunk a hiba természetéről és feltehető okáról, valamint javításának tehetséges módjairól. A súgóablak bezárása után a fenti három eset közül lehet választani. Pénzügyi feladatok VBA támogatása – 9. előadás 6 /41

7 Pénzügyi feladatok VBA támogatása – 9. előadás
Hibakezelés A hibák két osztályba sorolhatók: 1. A súlyos hiba [FatalError] a futás során nem javítható. Ha ilyet termeltünk, nincs mit tenni: a VÉGE [End] gombbal le kell állítani a rutint és ki kell javítani a hibát. (Súlyos hiba például a hivatkozás nem létező rutinra.) Pénzügyi feladatok VBA támogatása – 9. előadás 7 /41

8 Pénzügyi feladatok VBA támogatása – 9. előadás
Hibakezelés 2. Vannak azonban követhető hibák [trappable error], amelyeket menet közben is ki lehet javítani. Ilyen hiba például hivatkozás nem megnyitott állományra vagy nem aktivált munkalapra stb. Egy-egy követhető hiba kijavítása után érdemes a rutint tovább futtatni, esetleges további hibák felderítése végett. A követhető hibáknak van még egy nagyon kellemes tulajdonságuk: automatikusan is kezelhetők, ha a programot felkészítjük ilyen esetekre. Pénzügyi feladatok VBA támogatása – 9. előadás 8 /41

9 Rendszerhibakódok elemzése
Ha el akarjuk kerülni azt a bosszantó jelenséget, hogy rutinunk futása megszakad egy futási hiba miatt, magunkhoz kell ragadnunk a hibaüzenetek feldolgozását. Mint tudjuk ez az egyetlen eset, amikor legálisan használhatunk ugró utasításokat. A hiba „megragadására” a On Error Goto cimke hibakövető utasítás szolgál, amely kikapcsolja a beépített hibakezelést. Pénzügyi feladatok VBA támogatása – 9. előadás 9 /41

10 Rendszerhibakódok elemzése
Így futási hiba előfordulásakor a vezérlés a címkét tartalmazó (üres sor esetén a következő) utasításra kerül. Az itt kialakított hibaelemző blokkban (utasításcsoportban) elemezhetjük a hiba okát és természetét, valamint javító lépéseket iktathatunk be. Pénzügyi feladatok VBA támogatása – 9. előadás 10 /41

11 Rendszerhibakódok elemzése
A címkének ugyanabban a rutinban - továbbiakban hibakezelő - kell lennie, ahol a hibakövető utasítás van. A beépített hibakezelés mindaddig kikapcsolt állapotban marad, amíg az On Error Goto 0 visszaállító utasítással vissza nem kapcsoljuk. Ha ezt elmulasztottuk, a VBA automatikusan megteszi, amikor a hibakezelő rutin befejeződik. Pénzügyi feladatok VBA támogatása – 9. előadás 11 /41

12 Rendszerhibakódok elemzése
Hibakövető és visszaállító utasításokat bárhol és akárhányszor el lehet helyezni a rutinokban. Így lehetőségünk nyílik arra, hogy a rendszer hibakezelését egyes programrészekre korlátozzuk, másutt viszont saját hibaelemzést végezzünk. Fontos azonban tudni, hogy a hibakövető utasítás a teljes hívási láncra vonatkozik! Más szóval: egymásba ágyazott rutinhívások esetén bármelyik rutinban fordul is elő futási hiba, a vezérlés az utoljára végrehajtott hibakövető utasításban megadott címkére kerül. Pénzügyi feladatok VBA támogatása – 9. előadás 12 /41

13 Rendszerhibakódok elemzése
A hibakövető utasítás legtöbbször a rutin első utasítása, hiszen hatását rendszerint az egész rutinra érvényesíteni akarjuk. A címkével bevezetett hibaelemző programrészt viszont a rutin végén célszerű elhelyezni, mivel csak hiba esetén kell lefutnia. Ha így jártunk el, hibátlan esetben a címke előtt álló Exit Sub, illetve Exit Function utasítással léphetünk ki a rutinból. Pénzügyi feladatok VBA támogatása – 9. előadás 13 /41

14 Rendszerhibakódok elemzése
A hibaelemző blokkból normál futási módba a Resume utasítással lehet visszatérni. Az utasítás egyszersmind megszünteti a hibaállapotot is, vagyis nullázza a hibakód értékét. Az utasításnak 3 alesete van: - Resume visszaadja a vezérlést arra a programsorra, amelynek végrehajtása okozta a hibát; - Resume Next a vezérlés a hibás sort követő programsorra kerül; - Resume címke a vezérlés a címkével megjelölt sorra kerül; a címkének a hibaelemez blokkot tartalmazó rutinban kell lennie. Pénzügyi feladatok VBA támogatása – 9. előadás 14 /41

15 Rendszerhibakódok elemzése
Pontosabban az első két eset csak akkor érvényes, ha a hiba ugyanabban a rutinban keletkezett, amelyben a hibaelemző blokk is van. Tegyük fel, hogy ez az A rutin, és csak ebben van hibakövető utasítás; ekkor az A rutin → B rutin → C rutin hívási lánc esetén a C rutinban előforduló futási hiba hatására a vezérlést először az A rutinban levő hibaelemző kapja meg, majd a Resume, illetve Resume Next utasítás hatására a B rutinnak a C-t hívó, illetve az azt követő utasítására kerül. Pénzügyi feladatok VBA támogatása – 9. előadás 15 /41

16 Rendszerhibakódok elemzése
A futási hiba kódját az Err, szövegét az Error, a hibás sorban vagy azt megelőzően a rutinban bárhol álló szám-címke értékét pedig az Erl függvénnyel lehet lekérdezni; ezek rendre Integer, Long, illetve String típusú értéket adnak vissza. Pénzügyi feladatok VBA támogatása – 9. előadás 16 /41

17 Rendszerhibakódok elemzése
A hibaelemző blokkban a hiba természetéről például az MsgBox "Az " & Erl & " címkét követően az " & Err & " kódú hiba volt: " _ & Error(Err),‚ "Hibaüzenet" üzenettel adhatunk teljes körű tájékoztatást a képernyőn. (Ebben az esetben csak az OK gomb látszik, a felhasználó nem tehet egyebet, mint hogy tudomásul veszi az üzenetet. Ha választ is várunk, az MsgBox függvényt kell alkalmaznunk.) Pénzügyi feladatok VBA támogatása – 9. előadás 17 /41

18 Rendszerhibakódok elemzése
A hibakódok értékének az [1 ÷ 65535] intervallumba kell esnie. A beépített hibakódok értéke nem haladja meg a et, ám a kódsorozat korántsem folytonos. A számunkra leginkább fontos VBA hibakódokat a következő táblázatban foglaltuk össze. A teljes lista a VB-nézet súgójában található meg. Pénzügyi feladatok VBA támogatása – 9. előadás 18 /41

19 Rendszerhibakódok elemzése
Hibaüzenet Valószínű hibaokok 5 Invalid procedure call A formális és az aktuális paraméterek típusa nem egyezik 6 Overflow Típus értékhatárainak túllépése értékadás, számolás stb. során 9 Subscript out of range Hivatkozás konténer nem létező elemére (indexhatár túllépés) 1 Division by zero Osztási kísérlet nullával 13 Type mismatch Adatkonverziós kísérlet nem illeszthető típusok között 18 User interrupt occurred Kézi megszakítás a hibakezelő kikapcsolt állapotában 20 Resume without error Resume utasítás végrehajtási kísérlete hiba előfordulása nélkül Pénzügyi feladatok VBA támogatása – 9. előadás 19 /41

20 Rendszerhibakódok elemzése
Hibaüzenet Valószínű hibaokok 28 Out of stack space Verem túlcsordulás (túl sok egymásba ágyazott rutinhívás!) 35 Sub ot Function not defined Hivatkozás nem létező vagy nem elérhető (például Private) rutinra 52 Bad filename or number Hibás állománynév; hivatkozás nem nyitott állományra 53 File not found Hivatkozás nem létező állományra 54 Bad lile mode Irási kísérlet olvasásra megnyitott állományra stb. 55 F’ile already open Kísérlet ismételt megnyitásra vagy nyitott állomány törlésére 57 Device I/O error Nyomtató vagy lemezmeghajtó hiba 58 File already exists Már létező állománynév mentés másként eljárásban stb. Pénzügyi feladatok VBA támogatása – 9. előadás 20 /41

21 Rendszerhibakódok elemzése
Hibaüzenet Valószínű hibaokok 61 Disk full Betelt a lemez 62 Input past end of file Olvasási kísérlet az állomány végén 68 Device unavailable A külső eszköz nincs vonali kapcsolatban a számítógéppel 70 Permission denied Írási kísérlet védett vagy zárolt állományra 71 Disk not ready Nem létező vagy üres lemezmeghajtú 76 Path not found Állomány útvonala nem megfelelő 380 Invalid property value Érvénytelen tulajdonságérték 424 Object required Metódus/tulajdonság aktiválása, érvényes objektum-hivatkozás nélkül Pénzügyi feladatok VBA támogatása – 9. előadás 21 /41

22 Rendszerhibakódok elemzése
Hibaüzenet Valószínű hibaokok 438 Object doesnt support this Az objektumnak nincs ilyen tulajdonsága vagy metódusa property or method 449 Argument not optional Hiányzó aktuális paraméter 450 Wrong number of arguments A formális és az aktuális paraméterlista nem egyezik 482 Printer error Nyomtató hiba 485 Invalid picture type Ervénytelen képfájlformátum 1004 No object A hivatkozott objektum (például munkalap) nem létezik Pénzügyi feladatok VBA támogatása – 9. előadás 22 /41

23 Rendszerhibakódok elemzése
A teljes lista a VB-nézet súgójában található meg. Eléréséhez s Súgó indexében keressünk rá a Trappable errors szövegre. A lista magyar nyelven nem hozzáférhető. Pénzügyi feladatok VBA támogatása – 9. előadás 23 /41

24 Rendszerhibakódok elemzése
Ha az Err vagy az Error függyényt eljárásként aktiváljuk, megyáltozik a hatása: 1. Az Err = hibakód utasítással egyes rutinokban tetszőleges (célszerűen saját) hibakódot állíthatunk be. Ezt követően a hibakód elemzésével el tudjuk dönteni, hogy melyik rutinunkban keletkezett a hibajelzés. A beépített hibakódok értékéről mondottak értelmében, saját hibakódjaink számozását a biztonság okáért tól kell kezdenünk. Pénzügyi feladatok VBA támogatása – 9. előadás 24 /41

25 Rendszerhibakódok elemzése
2. Érdekes fogás, hogy az Error(Err) utasítással szimulálni lehet az Err kódú hibát. Hatására a VBA Úgy viselkedik, mintha a hiba ténylegesen bekövetkezett volna: generálja az Err kódnak megfelelő hibajelzést, amelyet egy szabályos hibaelemzővel fel tudunk dolgozni. Pénzügyi feladatok VBA támogatása – 9. előadás 25 /41

26 Rendszerhibakódok elemzése
Ha munkalapon kívánunk hibajelzést kiírni, Excel hibakódokat kell használnunk. Az áttekinthetőségi követelmény értelmében, célszerű ezeket számkód helyett Excel konstansokkal megadni. A lehetséges értékeket a következő táblázat tartalmazza. A kódokat kiírás előtt hibaértékké kell alakítani, a cvErr függvénnyel. Például a Cells(2,3).Value = CVErr(xlErrDiv0) utasítás „osztás nullával” hibajelzést jelenít meg az aktív munkalap C3 cellájában. Pénzügyi feladatok VBA támogatása – 9. előadás 26 /41

27 Rendszerhibakódok elemzése
Excel konstans Hibaüzenet Jelentés magyarul angolul 2000 xlErrNull #NULLA! #NULL! Hivatkozás diszjunkt tartományok metszetére 2007 xlErrDiv0 #ZÉRÓOSZTÓ! #DIV/0! Osztás nullával 2015 xlErrMilue #ÉRTÉK! #VALUE! Nem illeszthető (inkompatíbilis) típusú argumentumok vagy tényezők 2023 xlErrRef #HIV! #REF! Hivatkozás nem létező objektumra 2029 xtErrName #NÉV! #NAME? Ismeretlen rutin- vagy argumentum-név 2036 xtErrNum #SZÁM! #NUM! Hibás számformátum 2042 xlErrNA #HIÁNYZIK! #NA Hivatkozás üres cellára/tartományra („nincs adat”) Pénzügyi feladatok VBA támogatása – 9. előadás 27 /41

28 Rendszerhibakódok elemzése
A kódokat kiírás előtt hibaértékké kell alakítani, a cvErr függvénnyel. Például a Cells(2,3).Value = CVErr(xlErrDiv0) utasítás „osztás nullával” hibajelzést jelenít meg az aktív munkalap C2 cellájában. Pénzügyi feladatok VBA támogatása – 9. előadás 28 /41

29 Egyéni hibakódok alkalmazása
A programozók szeretnének olyan programot írni, amelyet nem lehet hibás vagy téves adatmegadással „kiakasztani”. A VBA azzal támogatja ezt, hogy megengedi saját hibakódok létrehozását. Saját hibakódjainkat rutinjainkból felismerhetjük anélkül, hogy a rendszer futási hibát észlelne. Pénzügyi feladatok VBA támogatása – 9. előadás 29 /41

30 Egyéni hibakódok alkalmazása
Mint említettük, hibaértéket csak Variant típusú változóban lehet létrehozni, a változónév = CVErr(hibakód) szintaxis szerint; ha pedig egy hibaértéket tartalmazó változót vizsgálunk, akkor IsError(változónév) = True választ kapjuk. Pénzügyi feladatok VBA támogatása – 9. előadás 30 /41

31 Egyéni hibakódok alkalmazása
Saját hibakódjainkat célszerű a kódtartomány felső végétől (65 535) visszafelé választani, így biztosan elkerülhetjük az ütközést a rendszerhibák (későbbiekben esetleg bővülő) kódjával. Ügyelnünk kell azonban arra, hogy munkalapon csak Excel-hibajelzéseket helyezzünk el, különben hibás tulajdonságra utaló (380 kódú) rendszerhiba lép fel. Pénzügyi feladatok VBA támogatása – 9. előadás 31 /41

32 Pénzügyi feladatok VBA támogatása – 9. előadás
Fejlettebb technikák Programjaink áttekinthetőségét nagyban javítja, ha numerikus hibakódok helyett kitalálunk jellemző konstansneveket. Ügyesen átgondolt saját hibakód-készlettel elkerülhetjük, hogy rutinjaink futási hiba miatt elakadjanak. Tovább javítja az olvashatóságot, ha hibaellenőrzésre csak egyetlen (vagy egy-két) függvényt használunk, s ezeket hívjuk meg a rutinok hibaelemző blokkjából. Pénzügyi feladatok VBA támogatása – 9. előadás 32 /41

33 Pénzügyi feladatok VBA támogatása – 9. előadás
Fejlettebb technikák A hibakövető utasítás csak addig aktív, amíg az őt tartalmazó rutin az, tehát minden olyan rutinban ki kell írnunk, ahol hiba előfordulására számítunk. Pénzügyi feladatok VBA támogatása – 9. előadás 33 /41

34 Pénzügyi feladatok VBA támogatása – 9. előadás
Fejlettebb technikák Ha a hibák csak egy meghatározott rutinban fordulhatnak elő - például az állománykezelési hibák a lemezes adat-állományainkat megnyitó, író-olvasó, lezáró rutinban -‚ akkor a hibakezelést célszerű beépíteni az eljárásba. Az ilyen rutin az On Error Resume Next hibakövető utasítással indul. Pénzügyi feladatok VBA támogatása – 9. előadás 34 /41

35 Pénzügyi feladatok VBA támogatása – 9. előadás
Fejlettebb technikák Ez kétélű fegyver, mert így a rutin végrehajtása a hibát okozó utasítás után folytatódik, mintha mi sem történt volna. Ezért minden olyan sor után, amely hibát eredményezhet, If Err <> O Then vizsgálatnak kell következnie, különben a hiba észrevétlen marad. Pénzügyi feladatok VBA támogatása – 9. előadás 35 /41

36 Pénzügyi feladatok VBA támogatása – 9. előadás
Fejlettebb technikák Amikor már biztos (?)‚ hogy rutinjaink hibátlanok, kiiktathatjuk a nemkívánatos figyelmeztető rendszerüzeneteket az Application.DisplayAlerts = False utasítással. Hatására például a munkalapok figyelmeztetés nélkül törlődnek, az állományo mentésre vonatkozó kérdés nélkül záródnak be stb. Pénzügyi feladatok VBA támogatása – 9. előadás 36 /41

37 Pénzügyi feladatok VBA támogatása – 9. előadás
Fejlettebb technikák Ennek az a magyarázata, hogy a VBA ilyenkor az alapértelmezésnek megfelelő „Igen” választ tekinti érvényesnek. Érzékelhető a veszélyes helyzet? A figyelmeztetéseket az Application.DisplayAlerts = True utasítással lehet visszakapcsolni. Pénzügyi feladatok VBA támogatása – 9. előadás 37 /41

38 Még fejlettebb technikák
A kézi megszakítás (Esc vagy CTRL + BREAK) igen hasznos találmány, ha sikerült összehoznunk egy végtelen ciklust. Sajnos azonban ezt a beavatkozást a felhasználó is elkövetheti — akár véletlenül, akár szándékosan. Murphy szerint, ha egy programot el Lehet rontani, akkor el is fogják rontani. Ez különösen akkor kellemetlen, ha emiatt elmaradnak műveletek, például nem záródnak le tisztességesen a megnyitott adatállományok; hálózatos üzemben elmarad a kijelentkezés; stb. Pénzügyi feladatok VBA támogatása – 9. előadás 38 /41

39 Még fejlettebb technikák
Ha nem szeretnénk ilyen bonyodalmakba keveredni, megváltoztathatjuk a rendszer alapértelmezését az Application.EnableCancelKey = xlErrorHandler utasítással. Ennek az lesz a következménye, hogy minden kézi megszakításkor 18-as kódú futási hiba keletkezik, amit kezelni tudunk saját hibaelemzőnkkel. Legegyszerűbben úgy lehet eljárni, hogy ilyen esetekben választ kérünk a felhasználótól a folytatásra vonatkozóan. Pénzügyi feladatok VBA támogatása – 9. előadás 39 /41

40 Még fejlettebb technikák
Elképzelhető, hogy ekkor valamilyen adatmódosításra, vagy egyéb felhasználói beavatkozásra lesz szükség. Az is lehetséges, hogy a felhasználó valamilyen okból tényleg be akarja fejezni a program futtatását; akkor tegyük ezt meg szabályszerűen. A kézi megszakítást az Application.EnableCancelKey = xlInterrupt utasítással kell újra engedélyezni (ezt programindításkor a VBA mindig automatikusan megteszi). Pénzügyi feladatok VBA támogatása – 9. előadás 40 /41

41 Még fejlettebb technikák
A legveszélyesebb utasítás szintaxisa: Application.EnableCancelKey = xlDisabled Ezzel teljesen kiiktatunk mindennemű kézi megszakítási lehetőséget. Bánjunk ezzel nagyon óvatosan! Ha ezt követően egy rutin - legvalószínűbben egy Resume utasítás hatására folytonosan ismétlődő hiba miatt - netán végtelen ciklusba kerül, vagy bármilyen más okból még véges életünk folyamán szeretnénk leállítani a futását, csak a RESET gombban bízhatunk. Pénzügyi feladatok VBA támogatása – 9. előadás 41 /41 41 /41

42 Pénzügyi feladatok VBA támogatása – 9. előadás
Köszönöm a figyelmet! Folyt köv. Pénzügyi feladatok VBA támogatása – 9. előadás 42 /41


Letölteni ppt "Pénzügyi feladatok VBA támogatása Barna Róbert KE GTK"

Hasonló előadás


Google Hirdetések