1 / 42

Barna Róbert KE GTK Informatika Tanszék

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

Télécharger la présentation

Barna Róbert KE GTK Informatika Tanszék

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


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

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

  3. 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

  4. 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

  5. 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

  6. 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

  7. 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

  8. 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

  9. 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

  10. 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

  11. 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

  12. 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

  13. 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

  14. 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 ResumeNext 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

  15. 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

  16. 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

  17. 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 32 767-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

  18. Rendszerhibakódok elemzése Pénzügyi feladatok VBA támogatása – 9. előadás 19 /41

  19. Rendszerhibakódok elemzése Pénzügyi feladatok VBA támogatása – 9. előadás 20 /41

  20. Rendszerhibakódok elemzése Pénzügyi feladatok VBA támogatása – 9. előadás 21 /41

  21. Rendszerhibakódok elemzése Pénzügyi feladatok VBA támogatása – 9. előadás 22 /41

  22. 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

  23. 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 32 768-tól kell kezdenünk. Pénzügyi feladatok VBA támogatása – 9. előadás 24 /41

  24. 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

  25. 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

  26. Rendszerhibakódok elemzése Pénzügyi feladatok VBA támogatása – 9. előadás 27 /41

  27. 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

  28. 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

  29. 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

  30. 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

  31. 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

  32. 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

  33. 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

  34. 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

  35. 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

  36. 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

  37. 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

  38. 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

  39. 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

  40. 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

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

More Related