Vea korral jätkake edasi: Vea käsitlemine Excel VBAs

  • Jaga Seda
Hugh West

Microsoft Exceli VBAs on veakäitlus üks kriitilisi ülesandeid. Kui olete kodeerija, siis teate, kui oluline on veakäitlus täiusliku rakenduse loomiseks. Iga viga avalduses võib teie VBA koodi mitmel viisil takistada. Seega peate olema ettevaatlik, et neid vigu VBA koodi täitmise ajal käsitleda. VBA koodi kasutamisel Excelis on palju tööaja vigu, millega te võite kokku puutuda. Et lahendadaüks neist, me kasutame Vea korral Jätka järgmist avaldus.

Selles õpetuses õpid kasutama Vea korral Jätka järgmist avaldus Excel VBA-s. See õpetus on punktuaalne koos sobivate näidete ja korralike illustratsioonidega. Nii et jääge meiega.

Lae alla praktiline töövihik

VBA vea korral jätkake Next.xlsm

Vigade käsitlemine Excel VBAs

Microsoft Exceli VBAga töötades puutute oma alamprotseduuris kokku paljude vigadega. Kui VBA ei saa käsku täita, viskab ta käivitamisvea.

Excel tegeleb nende vigadega automaatselt, nii et kui tekib tööaegne viga, kuvatakse vaikimisi veateade, näiteks järgmine:

Nüüd saate neid erinevalt käsitleda mõningate VBA avaldustega. Arutlen neid hilisemates osades.

Loe edasi: Kuidas parandada #REF! viga Excelis (6 lahendust)

VBA vigade avalduste kohta

Käsitleda jooksuaegseid vigu juhendame Excelit käsuga On Error. See otsustab, milliseid toiminguid me tahame kohe edasi teha. Põhimõtteliselt lülitame need vead välja selliste veakäitlusviiside abil.

Me kasutame Excel VBAs kolme liiki On Error avaldusi (süntaks).

  • Vea korral GoTo rida
  • Vea korral Jätka järgmist
  • On Error GoTo 0

Kui leiate vea, kasutage käsku On Error. Sest kui te ei kasuta On Error deklaratsiooni, on need käivitamisvead katastroofilised. See näitab veateadet ja peatab täitmise.

Kui me kasutame On Error avaldusega lülitame sisse "aktiveeritud" veakäitleja. "Aktiivne" veakäitleja on aktiveeritud veakäitleja, mis alustab veakäitlustoimingut. Kui veakäitleja osalemise ajal tekib viga, ei saa praeguse meetodi veakäitleja viga taluda. Pärast seda läheb kontroll tagasi kutsuvale protseduurile.

Kui kutsuval protsessil on aktiveeritud veakäitleja, käivitatakse see vea haldamiseks. Kui teie kutsuva süsteemi veakäitleja on vastavalt hõivatud, antakse kontroll tagasi varasemate kutsuvate protseduuride kaudu, kuni ta leiab aktiveeritud, kuid mitteaktiivse veakäitleja. Kui ta ei leia ühtegi mitteaktiivset aktiveeritud veakäitlejat, tähendab see, et viga on katastroofiline selle esinemiskohas.

Iga kord, kui veakäitleja annab volitused tagasi kutsuvale protseduurile, arendab see protseduur olemasolevat protseduuri. Käivitamine algab uuesti praeguses protseduuris hetkel, mille on valinud CV avaldus, kui veakäitleja käsitleb vigu mis tahes protseduuris.

'Vea korral jätkake järgmist' VBAs

Nüüd on Vea korral Jätka järgmist avaldusega antakse VBA-le käsk ignoreerida kõiki vigadega koodiridu ja jätkata kohe järgmise koodireaga. Pärast seda jätavad Exceli VBA koodid vigadega rea või read vahele ja lähevad edasi järgmise koodijärguga.

The Vea korral Jätka järgmist avaldis sunnib täitmist jätkama käsuga, mis järgneb kohe sellele koodireale, mis põhjustas jooksuaegse vea. See avaldis võimaldab täitmist vahele jätta isegi siis, kui esineb jooksuaegne viga. Kui te arvate, et mingi konkreetne koodirida võib tekitada vea, paigutage veakäitlusrutiin sinna, selle asemel et panna see protseduuri sees mujale. Vea korral Jätka järgmist avaldis muutub tühjaks, kui teie kood kutsub teist protseduuri. Seega, kui teil on vaja sobivat veakäitlust selles rutiinis, peate käivitama Vea korral Jätka järgmist käsk igas nimetatud mustris.

See on mõistlik, kui vahele jäetav koodirida ei ole makro õitsva töö jaoks vajalik. Kuid pidage meeles, et selle vale kasutamine võib olla kahjulik, kuna see võib anda soovimatuid tulemusi.

Pea meeles:

On Error Resume Next avaldus ei paranda tööaja vigu. See põhimõtteliselt ignoreerib vigu, kus teie VB täitmine jätkub sellest avaldusest, mis on tekitanud tööaja vea.

Vaadake järgmist koodi:

 Sub divide() MsgBox 5 / 0 MsgBox 5 / 2 End Sub 

Proovisime jagada 5 arvuga 0 ja 1. Käivitame koodi. See näitab järgmist väljundit:

See tekitab tööaegse vea. Me ei saa jagada arvu arvuga 0. Kui te koodiga silute, näete järgmist:

Kui VB programm leiab vea, peatab ta kohe protseduuri. Ta ei täida järgmist rida.

Nüüd rakendame Vea korral Jätka järgmist avaldus enne veaavaldust:

 Sub divide() On Error Resume Next MsgBox 5 / 0 MsgBox 5 / 2 End Sub 

Pärast koodi käivitamist näete järgmist:

Nagu näete, ignoreerib VBA vea tekitanud rea ja jätkab kohe järgmise koodireaga. Nii saate te kasutada funktsiooni Vea korral Jätka järgmist avalduse, et käsitleda viga Excel VBAs.

Näited 'Vea korral jätkake edasi' VBAs

Järgnevalt annan teile kaks näidet, mis käsitlevad Vea korral Jätka järgmist avaldust, mida saate rakendada oma Exceli töölehel VBA abil. Soovitan teil õppida ja rakendada kõiki neid oma töövihikus. See suurendab kindlasti teie Exceli teadmisi.

1. "Vea korral jätkake järgmist" avaldus töölehtede peitmiseks

Selles näites näitan teile VBA-koodi, mis peidab kõik aktiivse töövihiku töölehed.

Vaadake järgmist ekraanipilti:

Siin on meil neli töölehte. Me peidame need kõik ära, kasutades järgmist VBA-koodi:

 Sub hide_all_sheets() Dim copies As Worksheet For Each copies In ActiveWorkbook.Sheets copies.Visible = False Next copies End Sub 

Kui täidate järgmist koodi, näete järgmist käivitamisviga:

Excel näitab seda viga, sest te ei saa töövihikus kõiki lehti peita. Seega peate viga ignoreerima. Selleks peate oma koodireas rakendama käsku On Error Resume Next.

 Sub hide_all_sheets() Dim copies As Worksheet On Error Resume Next For Each copies In ActiveWorkbook.Sheets copies.Visible = False Next copies End Sub 

Pärast VBA-koodi täitmise lõpetamist näete järgmist väljundit:

Lõpuks ei näe pärast täitmist ühtegi viga. Seega, meie On Error Resume Next avaldus töötas VBA koodis tõesti hästi.

Loe edasi: Vead Excelis ja nende tähendus (15 erinevat viga)

2. VLOOKUP-funktsioon koos 'On Error Resume Next' funktsiooniga VBAs

Selles näites näitan ma näite VLOOKUP funktsioon VBAs . Nüüd, see VBA kood sisaldab ka Vea korral Jätka järgmist avaldus.

Vaadake järgmist ekraanipilti:

Siin näete mõnede inimeste nimesid ja nende vanust. Kõrvalolevas tabelis kasutame me VLOOKUP leida isiku nimi ja vanus.

Selleks sisestage järgmine kood:

 Sub VLOOKUP_Function() Dim i As Long For i = 5 To 9 Cells(i, 6).Value = WorksheetFunction.VLookup(Cells(i, 5), Range("B:C"), 2, 0) Next i End Sub 

Nüüd käivitage makro. Näete järgmist viga:

Nüüd on tegemist tööaja veaga. Miks see juhtub? Vaadake uuesti andmekogumit:

Nagu näete, puuduvad andmed "Aaron" ja "Emma" kohta. Seetõttu täidab see ainult funktsiooni VLOOKUP esimese kirje puhul. Pärast seda peatab see täitmise. Kui nüüd soovite viga ignoreerida ja jätkata ülejäänud vanuse leidmist, kasutage käsku Vea korral Jätka järgmist avaldus.

 Sub VLOOKUP_Function() Dim i As Long On Error Resume Next For i = 5 To 9 Cells(i, 6).Value = WorksheetFunction.VLookup(Cells(i, 5), Range("B:C"), 2, 0) Next i End Sub 

Pärast VBA-koodi käivitamist näete järgmist väljundit:

Nagu näete, rakendades Vea korral Jätka järgmist käsuga ignoreerisime viga ja leidsime ülejäänud isikute vanused. Meie VBA-kood ei leidnud Aaroni ja Emma andmeid. Seetõttu ignoreeris ta neid väärtusi ja tagastas ülejäänud väärtused Exceli töölehel.

Loe edasi: [Parandatud] Excel leidis probleemi ühe või mitme valemiviitega sellel töölehel

Väljalülitamine "Vea korral jätkake järgmist" Exceli VBAga

Nüüd võib tekkida olukord, kus te soovite VBA koodi teatud segmendi puhul vigu ignoreerida. Pidage meeles, et kui te kasutate VBA koodis avaldust On Error Resume Next, siis jätab see kõik vead pärast seda vahele. Kui te soovite selle välja lülitada ja lubada veakäsitlust mõne teise segmendi puhul, kasutage järgmist käsku On Error GoTo 0 See võimaldab veakäitluse uuesti.

Üldine kasutamine:

Sub error_handling()

Vigade ignoreerimiseks

Vea korral Jätka järgmist

// koodiread

Veakäitluse sisselülitamine

On Error GoTo 0

//koodide read

End sub

Vaadake järgmist VBA-koodi:

 Sub error_handling() Dim i As Long 'ignoreerida viga On Error Resume Next For i = 5 To 9 Cells(i, 6).Value = WorksheetFunction.VLookup(Cells(i, 5), Range("B:C"), 2, 0) Next i 'välja lülitada vea korral resume next On Error GoTo 0 MsgBox i / 0 End Sub 

Me kasutasime eelnevalt koodi VLOOKUP funktsioon. Siin on lisatud teile näitlikustamiseks täiendav koodiplokk. Meie kood ignoreerib vigu, kui täidab VLOOKUP kuid see aktiveerib veakäitluse pärast seda, kui On Error GoTo 0 avaldus.

Loe edasi: Excel VBA: lülitage välja "Vea korral jätkake edasi"

VBA 'On Error GoTo'

Eelnevalt arutasin vigade käsitlemist meetodi On Error abil. Kogu meie artikkel oli seotud Vea korral Jätka edasi. Nüüd on olemas ka kaks veatüüpi, mida ma järgnevalt käsitlen.

1. VBA On Error GoTo 0

The On Error Goto 0 avaldus on Exceli sisseehitatud seadistus, kui teie koodides ei ole veakäitlejat. See tähendab põhimõtteliselt seda, et kui VBA leiab vea koos On Error GoTo 0 , peatab see koodi käivitamise ja kuvab oma traditsioonilise veateate kasti.

On Error GoTo 0 avaldis lülitab põhimõtteliselt välja veakäitluse käesolevas protseduuris. See ei määratle rida 0 veakäitluskoodi alguseks, isegi kui meetod sisaldab rea numbriga 0.

Vaadake järgmist koodi:

 Sub on_error_goto_0() Dim copies As Worksheet On Error Resume Next For Each copies In ActiveWorkbook.Sheets copies.Visible = False Next copies On Error GoTo 0 ActiveSheet.Name = "Copy-4" End Sub 

Seda koodi oleme teile juba näidanud. See kood põhimõtteliselt peidab kõik töölehed teie praeguses töövihikus. Nüüd on mul tõepoolest lisakood koos On Error GoTo 0 et näidata viga. Kui te käivitate koodi, näete järgmist:

See näitab seda viga, sest aktiivses töövihikus ei saa olla sama nimega lehti.

2. VBA On Error GoTo rida

Nüüd saate Excelile anda ka korralduse käivitada teine koodilõik, kui ta leiab mõne vea, kasutades selleks käsku Vea korral GoTo rida See ütleb Excelile, et ta peab pärast vea leidmist midagi käivitama.

Rea argumendiks on ükskõik milline rea silt või rea number. Kui meie kood põhjustab mingi tööaja vea, siis liigub see reale, põhjustades veakäitleja aktiivse täitmise. Pea meeles, et sinu defineeritud rida peab olema täpselt samas protseduuris kui On Error avaldis, vastasel juhul põhjustab see kompileerimisvea.

Vaadake järgmist koodi:

 Sub on_error_goto_line() Dim copies As Worksheet On Error Resume Next For Each copies In ActiveWorkbook.Sheets copies.Visible = False Next copies On Error GoTo error_handler ActiveSheet.Name = "Copy-4" Exit Sub error_handler: MsgBox "On olemas ka sama nimega leht. Proovi teist." End Sub 

Sa nägid koodi eelmises näites. Kui me kasutasime On Error GoTo 0 , tekitas see vea. Kuid siinkohal asendasime selle välja Vea korral GoTo rida avaldus.

Nüüd käivitage kood ja näete järgmist:

Nagu näete, ei näita see meile standardset vea dialoogiakent. Selle asemel näitab see kohandatud teateakent, mille me lõime programmis error_handler Kui Excel leiab mõne vea, siis hüppab ta järgmisse segmenti error_handler segmendi ja näitab meile sõnumikasti.

Samuti kasutasime Exit Sub Kui ei ole lehte nimega " VLOOKUP ", nimetab meie VBA-kood aktiivse lehe ümber. Seejärel peame siinkohal täitmise lõpetama, sest meil ei ole vaja jätkata veakäitlejaga ja kuvada sõnumikasti.

VBA "vea korral" ei tööta Excelis

Mõnikord, ükskõik kui palju sa ka ei püüa, ei tööta meetod On Error. Varem rakendasime me funktsiooni On Error meetodit vigade käsitlemiseks. Kuid mõnikord näitab see vigu ka siis, kui kasutate Vea korral Jätka järgmist või On Error GoTo 0 Teie koodis võib olla mitu põhjust, mida peate parandama. Ma ei kavatse seda teile näidata.

VBA põhiline põhjus ' On Error Ei tööta Excelis on sisse lülitatud valik "Break on All Errors" (katkestamine kõigi vigade korral).

Selle lahendamiseks järgige järgmisi samme:

📌 Sammud

  • Kõigepealt vajutage Alt+F11 klaviatuuril, et avada VBA redaktor.
  • Nüüd klõpsa Tööriistad> Valikud.

  • Pärast seda klõpsake nuppu Üldine vahekaart Valikud dialoogiaknas.

  • Siin näete, " Kõikide vigade katkestamine " on juba kontrollitud. Põhimõtteliselt takistab see vigade käsitlemist.
  • Selle muutmiseks valige valik " Katkestus käitlemata vigade korral " ja klõpsake nupule OK .

Ma loodan, et see parandab teie probleemi, et VBA "On Error" ei tööta Excelis.

Loe edasi: Nime vea põhjused ja parandused Excelis (10 näidet)

💬 Asjad, mida meeles pidada

✎ Vea korral jätkake järgmine ei paranda vigu. See põhimõtteliselt ignoreerib viga ja jätkab järgmise avaldusega.

Excel püüab ja salvestab tööaja vead Err objektis. Kui me kasutame Vea korral Jätka järgmist avaldusega kustutatakse Err objekti omadused.

Saate välja lülitada Vea korral Jätka järgmist avalduse oma VBA koodis Excelis, lisades selle juurde On Error GoTo 0 avaldus.

Kokkuvõte

Kokkuvõtteks loodan, et see õpetus andis teile kasulikke teadmisi, et kasutada Vea korral Jätka järgmist Excel VBA-s. Soovitan teil õppida ja rakendada kõiki neid juhiseid oma andmekogumi suhtes. Laadige alla harjutustööraamat ja proovige neid ise. Samuti võite vabalt anda tagasisidet kommentaaride sektsioonis. Teie väärtuslik tagasiside hoiab meid motiveerituna selliste õpetuste loomiseks.

Ärge unustage meie veebilehte Exceldemy.com erinevate Exceliga seotud probleemide ja lahenduste kohta.

Jätkake uute meetodite õppimist ja kasvamist!

Hugh West on suurte kogemustega Exceli koolitaja ja analüütik, kellel on selles valdkonnas üle 10-aastane kogemus. Tal on raamatupidamise ja rahanduse bakalaureusekraad ning ärijuhtimise magistrikraad. Hugh’l on kirg õpetamise vastu ning ta on välja töötanud ainulaadse õpetamisviisi, mida on lihtne järgida ja mõista. Tema Exceli ekspertteadmised on aidanud tuhandetel õpilastel ja spetsialistidel üle maailma oma oskusi parandada ja karjääris silma paista. Oma ajaveebi kaudu jagab Hugh oma teadmisi maailmaga, pakkudes tasuta Exceli õpetusi ja veebikoolitusi, mis aitavad üksikisikutel ja ettevõtetel oma potentsiaali täielikult ära kasutada.