Ez az oktatóanyag elmagyarázza a VBA On Error Resume Next és a Goto Statement című részt.
Még ha a kódja tökéletesen felépített is, előfordulhat, hogy a felhasználó nem azt teszi, amit elvárna. Emiatt hibakezelőket kell beillesztenie a kódjába, valahányszor lehetséges, hogy hiba lép fel.
Hiba esetén Folytassa a következőt
Az On Error Resume Next utasítás azt mondja a VBA -nak, hogy hagyja ki a hibákat tartalmazó kódsorokat, és folytassa a következő sorral. A VBA figyelmen kívül hagyja a hibát tartalmazó sort vagy sorokat, és a következő kódsorra lép.
Ez akkor hasznos, ha a figyelmen kívül hagyható kódsor nem kritikus a makró sikeres futtatásához, de helytelen használat esetén meglehetősen veszélyes lehet, mivel nem szándékos eredményeket adhat.
Például az alábbi eljárásban:
123456 | All HideAllSheets ()Dim ws munkalapkéntMinden ws -hez az ActiveWorkbook.Sheets -benws.Visible = HamisKövetkező wsEnd Sub |
Ha ezt a kódot futtatjuk, hibaüzenetet kapunk, mivel nem tudjuk elrejteni a munkafüzet összes munkalapját - legalább egy munkafüzetnek láthatónak kell maradnia.
Ha azonban az alábbiak szerint módosítjuk az eljárást, a kód a hibán túl folytatódik, és a munkafüzet utolsó lapja látható marad.
1234567 | All HideAllSheets ()Hiba esetén Folytassa a következőtDim ws munkalapkéntMinden ws -hez az ActiveWorkbook.Sheets -benws.Visible = HamisKövetkező wsEnd Sub |
GoTo 0 hiba esetén
Ha nincs kódkezelő a kódunkban, Hiba: Goto 0 az Excel alapértelmezett beállítása. Ez alapvetően azt jelenti, hogy amikor hiba történik a GoTo 0 hiba esetén, A VBA leállítja a kódfuttatást, és megjeleníti a szokásos hibaüzenet -mezőt, például:
Ha olyan hibacsapdát tettünk, mint a Hiba esetén Folytassa a következőt kódunkban, de akkor vissza akarjuk állítani a hibát az alapértelmezettre, beilleszthetünk egy Hiba: Goto 0 sor a kódunkba.
12345678910 | Sub ErrorGoTo0 ()Hiba esetén Folytassa a következőtDim ws munkalapkéntMinden ws -hez az ActiveWorkbook.Sheets -benws.Visible = HamisKövetkező wsGoTo 0 hiba esetén'Futtasson több kódot itt például:ActiveSheet.Name = "Lap1"End Sub |
Most, ha hiba történt a kódunkban a Hiba: Goto 0 vonal, az Excel alapértelmezett hibaüzenete jelenik meg. Ebben a példában már van Sheet1 nevű lap az ActiveWorkbookban, mint a fenti kód Hiba: Goto 0 elrejti a lapot, de nem törli. Ekkor megjelenik az alapértelmezett Excel hibaüzenet, amely azt jelzi, hogy a munkalap neve már elkészült.
Hiba esetén lépjen ide Vonal
A kód használatával arra is kényszeríthetjük kódunkat, hogy egy másik kódsorba lépjen át Goto hiba Vonal amely azt mondja a VBA -nak, hogy hiba esetén egy adott kódsorra lépjen.
123456789101112 | Sub ErrorGoToLine ()Hiba esetén Folytassa a következőtDim ws munkalapkéntMinden ws -hez az ActiveWorkbook.Sheets -benws.Visible = HamisKövetkező wsOn Error GoTo errhandlerActiveSheet.Name = "Lap1"Kilépés a Subbólhibakezelő:MsgBox ("Már létezik lap1!", VbCritical)End Sub |
A fenti példában, amikor a kód megtalálja a „Sheet1” lapot, a kódkezelő címke alatti kódsorba kerül - ebben az esetben egy egyéni üzenetdobozt hív meg, amely tájékoztatja a felhasználókat, hogy a lap már kilép. A hibakezelő címkéje után kettőspontot kell elhelyezni, hogy a VBA jelezze, hogy címke.
1 | hibakezelő: |
A kód ezután leugrik a címke alatti sorra, és visszaadja az egyéni üzenetmezőt.
Ez akkor hasznos, ha nem szeretné, hogy felhasználója a Hibakeresés gombra kattintva beírja a kódot, mivel a szabványos Excel üzenet mindig lehetőséget ad a kód hibakeresésére.
Szükségünk van egy Kilépés a Subból az eljárásban. Ha van NEM a Sheet1 nevű munkalapot, akkor az a kódsor futna, és az aktív lapot Sheet1 -re nevezi át. Ezután azt akarjuk, hogy a kód véget érjen - nem akarjuk, hogy a hibakezelőhöz továbbítsa, és megjelenítse az üzenetdobozt. A Kilépés alsor ezután kilép az eljárásból és leállítja a kódot.