Hogyan lehet figyelmen kívül hagyni a hibákat a VBA használatával On Error Resume Next Statement?

Excel VBA On Error Resume Next

A VBA On Error Resume Next egy hibakezelő utasítás. Ha a hiba a kód futtatása közben jelentkezik, ahelyett, hogy hibát mutatna, folytassa a következő kódsor folytatását a hibaüzenet figyelmen kívül hagyásával, használhatja ezt az utasítást.

Azok, akik rendszeresen írnak kódokat az excel VBA-ban, tudják, hogy a hozzáértő kódok megírása után is hibákat tapasztalhatnak, de ezt a hibát figyelmen kívül akarják hagyni, és a következő kódsorokkal tovább futnak. A hibaüzenetek megjelenésének egyik tipikus példája, amikor a VLOOKUP munkalapfüggvény nem találja meg a keresési értéket a tábla tömbből. Nem ad vissza # N / A hibát; inkább dobja a hibát. Mint „Nem sikerült megszerezni a munkalap függvényosztály VLOOKUP tulajdonságát.”

Ha nem tudja, miért kapjuk ezt a hibát, akkor nagyon nehéz kijavítani a hibát. A VBA-ban van egy " On Error Resume Next " nevű szolgáltatás .

Mit csinál a következő hibaüzenet a VBA-ban?

Vannak bizonyos területek kódolóként. Biztosan tudni fogjuk, hogy ez hibaüzenetet fog adni, de a kód folytatása érdekében figyelmen kívül kell hagynunk ezt a hibát, így a hiba elhanyagolása mindenki számára általános kétség.

A VBA On Error Resume Next utasítás használatával figyelmen kívül hagyhatjuk a hibát, és folytathatjuk a következő kódsort.

1. példa

Tegyük fel, hogy sok munkalapja van, és néhányat elrejt a VBA projekt részeként. Például az alábbiakban láthatók azok a munkalapok, amelyek a munkalapomban vannak.

Írtam kódokat az „Értékesítés és„ Nyereség ”lapok elrejtésére, az alábbiakban pedig a kód található.

Kód:

Sub On_Error () munkalapok ("Értékesítés"). Visible = xlVeryHidden munkalapok ("Profit 2019"). Visible = xlVeryHidden munkalapok ("Profit"). Visible = xlVeryHidden End Sub

Most elkezdem a kódok futtatását soronként az F8 billentyű segítségével.

Ha még egyszer megnyomom az F8 billentyűt, az elrejti az „ Értékesítés ” nevű lapot .

Most nyomja meg még egyszer az F8 billentyűt, és nézze meg, mi történik.

„Alaptartomány a tartományon kívül” hibát kaptunk, mert a jelenlegi kódsor az alábbiakat mondja.

Munkalapok ("Profit 2019"). Visible = xlVeryHidden

A „ Profit 2019 ” nevű munkalapot próbálja elrejteni , de a „Profit 2019” nevű munkalap nincs.

Ezekben az esetekben, ha a munkalap nem létezik a munkafüzetben, figyelmen kívül kell hagynunk a hibát, és folytatnunk kell a kód futtatását az „Aláírási tartományon kívüli” hiba figyelmen kívül hagyásával.

A kód következő sora azt mondja

Munkalapok ("Profit"). Visible = xlVeryHidden

Ez a munkalap létezik ebben a munkafüzetben, így a hiba figyelmen kívül hagyása nélkül nem léphetünk erre a kódsorra.

A hiba figyelmen kívül hagyásához hozzá kell adnunk a „On Error Resume Next” utasítást.

Kód:

Sub On_Error () On Error A következő munkalapok folytatása ("Értékesítés"). Visible = xlVeryHidden munkalapok ("Profit 2019"). Visible = xlVeryHidden munkalapok ("Profit"). Visible = xlVeryHidden End Sub

Mint fent láthatja, a kód tetejére állítottam az állítást, mielőtt bármelyik sor elindulna. Most futtassa a kódot, és nézze meg, mi történik.

Most abban a sorban vagyok, amelyik korábban hibát kapott, nyomja meg az F8 billentyűt, és nézze meg, mi történik.

Ugrottam a következő kódsorra, anélkül, hogy hibát mutattam volna, a tetején található utasítás miatt, amely a „On Error Resume Next” VBA utasítás.

2. példa

Most meglátjuk, hogyan kell használni ezt az állítást még egy példával. Nézze meg a példa alábbi adatszerkezetét.

Az első táblázat felett két olyan táblázat található, amelyekben a Emp táblázat neve és a fizetésük részletei szerepelnek a második táblázatban, és csak az Emp nevünk van, ezért a VLOOKUP használatával be kell szereznünk a bér részleteit a bal oldali táblázatból.

Az alábbiakban látható a kód, amelyet a részletek megszerzéséhez írtam.

Kód:

Sub On_Error1 () Dim k Meddig k = 2 - 8 celláig (k, 6). Érték = WorksheetFunction.VLookup (cellák (k, 5), tartomány ("A: B"), 2, 0) Következő k vége Alatti

Most futtassa a kódot soronként, és nézze meg, mi történik.

Az első cellakód futtatásakor megkapjuk az eredményt az első alkalmazottra. Ismételje meg ugyanezt a második alkalmazottnál is.

Ezúttal megkaptuk a hibaüzenetet. Nézzük meg a táblázat második alkalmazott nevét.

A második alkalmazott neve „Gayathri”, de ez a név nem szerepel az első táblázatban, így a VBA VLOOKUP függvény nem ad vissza „# N / A” hibát, ha a VLOOKUP nem találja a keresési értéket a asztal; hanem a fenti hibaüzenetet adja.

Célunk az, hogy ha az alkalmazott neve nem található meg a táblázatban, akkor egy üres cellára van szükségünk az adott alkalmazott számára, és figyelmen kívül hagyjuk a hibát, és eredményt adunk a többi névnél.

Hozzá kell adnunk a ciklus belsejében az „On Error Resume Next” utasítást.

Kód:

Sub On_Error1 () Dim k Addig, amíg k = 2 - 8 On Hiba A következő cellák folytatása (k, 6). Érték = WorksheetFunction.VLookup (Cells (k, 5), Range ("A: B"), 2, 0 ) Következő k Vége Sub

Most futtassa a kódot, és nézze meg az eredményt.

Két alkalmazott neve, a „ Gayathri & Karanveer ”, nincs ott a listán, ezért ezeknek a vonalkódoknak hibát kellett észlelniük, mivel hozzáadtuk a „ On Error Resume Next ” hibakezelő nyilatkozatot, amely figyelmen kívül hagyta ezt a kódsort és folytatta a következő alkalmazottnak.

Emlékezetes dolgok itt

  • A „On Error Resume Next” a hibakezelő utasítás, amikor figyelmen kívül kell hagynunk az ismert hibát.
  • Ha csak egy adott kódkészletre kívánja figyelmen kívül hagyni a hibaüzenetet, zárja be a következő hibaüzenetet a „ On Error GoTo 0 ” utasítás hozzáadásával .

érdekes cikkek...