A hibakezelők lehetővé teszik annak meghatározását, hogy mi történjen, ha az Excel makrókódja futása közben hiba történik. A hibakezelők a következőkhöz hasonló sorok:
Hiba esetén GoTo MyError
Hibakezelők nélkül a kódban előforduló bármely hiba arra készteti az Excelt, hogy aktiváljon egy kevésbé hasznos hibaüzenetet, amely általában nem adja meg egyértelműen a történteket. A hibakezelők segítségével azonban dönthet úgy, hogy figyelmen kívül hagyja a hibát, vagy kecsesen kilép a kódból a saját üzenetével a felhasználónak.
Háromféle hibaüzenet létezik:
-
Hiba esetén GoTo SomeLabel: A kód a megadott címkére ugrik.
-
Error Resume Next: A hiba figyelmen kívül marad, és a kód folytatódik.
-
Error GoTo 0 esetén: A VBA visszaáll a normál hibaellenőrzési viselkedésre.
Hiba esetén GoTo SomeLabel
Néha egy hiba a kódban azt jelenti, hogy kecsesen ki kell lépnie az eljárásból, és egyértelmű üzenetet kell adnia a felhasználóknak. Ilyen helyzetekben az On Error GoTo utasítással utasíthatja az Excelt, hogy ugorjon egy bizonyos kódsorra.
Például a következő kis kódrészletben megmondja az Excelnek, hogy az A1 cellában lévő értéket ossza el az A2 cellában lévő értékkel, majd helyezze el a választ az A3 cellába. Könnyen. Mi romolhat el?
Almakró1()
Tartomány("A3").Érték = Tartomány("A1").Érték / Tartomány("A2").Érték
Vége Sub
Mint kiderült, két fő dolog ronthat el. Ha az A2 cellában 0 van, akkor 0-val osztás hibaüzenetet kapunk. Ha az A2 cella nem numerikus értéket tartalmaz, akkor típushibát kap.
A kellemetlen hibaüzenetek elkerülése érdekében jelezze az Excelnek, hogy Hiba esetén azt szeretné, hogy a kód végrehajtása a MyExit címkére ugorjon.
A következő kódban a MyExit címkét egy olyan üzenet követi a felhasználónak, amely csúnya hibaüzenet helyett barátságos tanácsot ad. Vegye figyelembe a MyExit címke előtti Kilépési alsort is, amely biztosítja, hogy a kód egyszerűen kilépjen, ha nem történik hiba:
Almakró1()
Hiba esetén GoTo MyExit
Tartomány("A3").Érték = Tartomány("A1").Érték / Tartomány("A2").Érték
Exit Sub
MyExit:
MsgBox "Kérjük, használjon érvényes, nullától eltérő számokat"
Vége Sub
Hiba esetén Folytatás a következővel
Néha azt szeretné, hogy az Excel figyelmen kívül hagyjon egy hibát, és egyszerűen folytassa a kód futtatását. Ilyen helyzetekben használhatja az On Error Resume Next utasítást.
Például a következő kódrészlet a GhostFile.exe nevű fájl törlésére szolgál a C:Temp könyvtárból. A fájl törlése után egy szép üzenetmező tájékoztatja a felhasználót, hogy a fájl eltűnt:
Almakró1()
Öld meg a "C:TempGhostFile.exe" fájlt
MsgBox "A fájl törölve."
Vége Sub
A kód remekül működik, ha valóban van törölnivaló fájl. De ha valamilyen oknál fogva a GhostFile.exe nevű fájl nem létezik a C:Temp meghajtón, akkor hibaüzenet jelenik meg.
Ebben az esetben nem érdekel, ha a fájl nincs ott, mert úgyis törölni akarta. Így egyszerűen figyelmen kívül hagyhatja a hibát, és továbbléphet a kóddal.
Az On Error Resume Next utasítás használatával a kód lefut, függetlenül attól, hogy a célfájl létezik-e vagy sem:
Almakró1()
Hiba esetén Folytatás a következővel
Öld meg a "C:TempGhostFile.exe" fájlt
MsgBox "A fájl törölve."
Vége Sub
Error GoTo 0
Bizonyos hibaüzenetek használatakor szükség lehet a VBA hibaellenőrzési viselkedésének visszaállítására. Annak megértéséhez, hogy ez mit jelent, vessen egy pillantást a következő példára.
Itt először törölni kell a GhostFile.exe nevű fájlt a C:Temp könyvtárból. Az olyan hibák elkerülése érdekében, amelyek abból fakadhatnak, hogy a célfájl nem létezik, használja az On Error Resume Next utasítást. Ezek után megpróbálsz valami gyanús számítást végezni úgy, hogy elosztod a 100/Mike számot:
Almakró1()
Hiba esetén Folytatás a következővel
Öld meg a "C:TempGhostFile.exe" fájlt
Tartomány("A3").Érték = 100 / "Mike"
Vége Sub
Ennek a kódrészletnek a futtatása hibát generál a fuzzy matematika miatt, de nem. Miért? Mert az utolsó utasítás, amit a kódnak adott, az Error Resume Next volt. A sor után észlelt hibákat a rendszer gyakorlatilag figyelmen kívül hagyja.
A probléma orvoslására használhatja az On Error GoTo 0 utasítást a normál hibaellenőrzési viselkedés visszaállításához:
Almakró1()
Hiba esetén Folytatás a következővel
Öld meg a "C:TempGhostFile.exe" fájlt
Error GoTo 0
Tartomány("A3").Érték = 100 / "Mike"
Vége Sub
Ez a kód figyelmen kívül hagyja a hibákat az On Error GoTo 0 utasításig. Ezt az utasítást követően a kód visszatér a normál hibaellenőrzésre, és kiváltja a fuzzy matematikából származó várt hibát.