Turinys
"Microsoft Excel VBA" programoje klaidų tvarkymas yra viena iš svarbiausių užduočių. Jei esate programuotojas, žinote, kaip svarbu tvarkyti klaidas, kad sukurtumėte tobulą programą. Bet kokia klaida pareiškime gali įvairiais būdais trukdyti jūsų VBA kodui. Taigi, vykdydami VBA kodą turite būti atsargūs, kad galėtumėte tvarkyti šias klaidas. Naudojant VBA kodą "Excel" programoje galite susidurti su daugybe klaidų vykdymo metu.vieną iš jų, naudojame Dėl klaidos tęsti toliau pareiškimas.
Šioje pamokoje išmoksite naudoti Dėl klaidos tęsti toliau teiginys Excel VBA. Ši pamoka bus tiksli, su tinkamais pavyzdžiais ir tinkamomis iliustracijomis. Taigi, būkite su mumis.
Atsisiųsti praktikos sąsiuvinį
VBA Esant klaidai tęsti Next.xlsm
Klaidų tvarkymas "Excel VBA" programoje
Dirbdami su "Microsoft Excel" VBA, savo paprocedūroje susidursite su daugybe klaidų. Kai VBA negali įvykdyti teiginio, ji išmeta vykdymo laiko klaidą.
"Excel" automatiškai susidoroja su šiomis klaidomis, todėl, kai atsiranda vykdymo klaida, rodomas numatytasis klaidos pranešimas, pvz:
Dabar su jais galite įvairiai elgtis naudodami tam tikrus VBA teiginius. Juos aptarsiu tolesniuose skyriuose.
Skaityti daugiau: Kaip ištaisyti #REF! klaidą programoje "Excel" (6 sprendimai)
Dėl klaidų teiginių VBA
Norėdami tvarkyti vykdymo metu daromas klaidas, nurodome "Excel" naudodami teiginį On Error. Jis nusprendžia, kokias operacijas norime iš karto atlikti toliau. Iš esmės, šiomis klaidų tvarkymo rūšimis išjungiame šias klaidas.
"Excel VBA" programoje naudojame trijų rūšių "On Error" teiginius (sintaksė).
- Dėl klaidos GoTo linija
- Dėl klaidos tęsti toliau
- Dėl klaidos pereiti į 0
Radę klaidą, naudokite komandą On Error. Nes jei nenaudojate Dėl klaidos deklaracija, šios vykdymo metu padarytos klaidos bus pražūtingos. Ji parodys klaidos užklausą ir sustabdys vykdymą.
Kai naudojame Dėl klaidos teiginį, įjungiame "įjungtą" klaidų tvarkytuvą. "Įjungtas" klaidų tvarkytuvas yra įjungtas tvarkytuvas, kuris pradeda klaidų tvarkymo operaciją. Jei klaida atsiranda dalyvaujant klaidų tvarkytuvui, dabartinio metodo klaidų tvarkytuvas negali atlaikyti klaidos. Po to valdymas grįžta į kviečiančiąją procedūrą.
Jei kviečiantis procesas turi įjungtą klaidų tvarkytuvą, jis įjungiamas klaidai valdyti. Jei kviečiančios sistemos klaidų tvarkytuvas atitinkamai įjungtas, valdymas grąžinamas per ankstesnes iškvietimo procedūras, kol randamas įjungtas, bet neaktyvus klaidų tvarkytuvas. Jei nerandamas joks neaktyvus įjungtas klaidų tvarkytuvas, vadinasi, klaida yra katastrofiška jos atsiradimo vietoje.
Kiekvieną kartą, kai klaidų tvarkytojas grąžina įgaliojimus kviečiančiajai procedūrai, ši procedūra išvysto esamą procedūrą. Vykdymas iš naujo pradedamas esamoje procedūroje tuo momentu, kurį pasirinko CV teiginys, kai klaidų tvarkyklė tvarko bet kurios procedūros klaidas.
"Klaidai įvykus, tęsti toliau" VBA
Dabar Dėl klaidos tęsti toliau teiginys nurodo VBA ignoruoti visas kodo eilutes, kuriose yra klaidų, ir iš karto pereiti prie kitos kodo eilutės. Po to "Excel" VBA kodai praleis eilutę ar eilutes, kuriose yra klaidų, ir pereis prie kitos kodo sekos.
Svetainė Dėl klaidos tęsti toliau teiginys verčia tęsti vykdymą iš karto tęsiant komandą, einančią po kodo eilutės, sukėlusios vykdymo laiko klaidą. Šis teiginys leidžia praleisti vykdymą, net jei yra vykdymo laiko klaida. Jei manote, kad tam tikra kodo eilutė gali sukelti klaidą, įdėkite klaidų tvarkymo procedūrą ten, o ne kitoje procedūros vietoje. Dėl klaidos tęsti toliau teiginys tampa nenaudojamas, kai jūsų kodas iškviečia kitą procedūrą. Taigi, kai jums reikia suderinti klaidų tvarkymą toje procedūroje, turite paleisti Dėl klaidos tęsti toliau komandą kiekviename įvardytame šablone.
Tai pagrįsta, kai kodo eilutė, kurią galite praleisti, nėra būtina makrokomandos klestinčiam veikimui. Tačiau atminkite, kad netinkamas jos naudojimas gali būti žalingas, nes gali duoti nenumatytų rezultatų.
Atminkite:
Užrašas On Error Resume Next neištaiso vykdymo klaidų. Jis iš esmės ignoruoja klaidas, kai jūsų VB vykdymas bus tęsiamas nuo užrašo, kuris sukėlė vykdymo klaidą.
Pažvelkite į šį kodą:
Sub divide() MsgBox 5 / 0 MsgBox 5 / 2 End Sub
Bandėme padalyti 5 su 0 ir 1. Paleiskime kodą. Jis parodys tokią išvestį:
Tai sukelia vykdymo klaida. Negalime dalyti skaičiaus iš 0. Kai derinsite kodą, pamatysite šią klaidą:
Kai VB programa randa klaidą, ji iš karto nutraukia procedūrą. Ji nevykdo šios eilutės.
Dabar įgyvendinkime Dėl klaidos tęsti toliau teiginį prieš klaidos teiginį:
Sub divide() On Error Resume Next MsgBox 5 / 0 MsgBox 5 / 2 End Sub
Paleidę kodą, pamatysite šį vaizdą:
Kaip matote, VBA ignoruoja eilutę, kurioje įvyko klaida, ir iš karto pereina prie kitos kodo eilutės. Tokiu būdu galite naudoti Dėl klaidos tęsti toliau teiginys, skirtas klaidai tvarkyti "Excel VBA" programoje.
VBA pavyzdžiai 'Klaidai įvykus, tęsti toliau'
Tolesniuose skyriuose pateiksiu du pavyzdžius Dėl klaidos tęsti toliau teiginį, kurį galite įdiegti į "Excel" darbalapį naudodami VBA. Rekomenduoju išmokti ir pritaikyti visus šiuos teiginius savo darbalapyje. Tai neabejotinai pagilins jūsų "Excel" žinias.
1. "Dėl klaidos tęsti toliau" teiginys, skirtas darbalapiams paslėpti
Šiame pavyzdyje parodysiu VBA kodą, kuris paslėps visus aktyvaus sąsiuvinio darbalapius.
Pažvelkite į šią ekrano nuotrauką:
Čia turime keturis darbo lapus. Visus juos paslėpsime naudodami toliau pateiktą VBA kodą:
Sub hide_all_sheets() Dim copies As Worksheet For Each copies In ActiveWorkbook.Sheets copies.Visible = False Next copies End Sub
Įvykdžius toliau pateiktą kodą, matysite šią vykdymo klaidos klaidą:
"Excel" rodo šią klaidą, nes negalite paslėpti visų darbaknygės lapų. Taigi turite ignoruoti šią klaidą. Norėdami tai padaryti, savo kodo eilutėje turite įdiegti teiginį 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
Baigę vykdyti VBA kodą, pamatysite tokią išvestį:
Galų gale, įvykdę komandą, nematysite jokių klaidų. Taigi, mūsų teiginys On Error Resume Next VBA kode veikė tikrai gerai.
Skaityti daugiau: "Excel" klaidos ir jų reikšmė (15 skirtingų klaidų)
2. VLOOKUP funkcija su 'On Error Resume Next' VBA
Šiame pavyzdyje parodysiu pavyzdį VLOOKUP funkcija VBA . Dabar šiame VBA kode taip pat yra Dėl klaidos tęsti toliau pareiškimas.
Pažvelkite į šią ekrano nuotrauką:
Čia matote kai kurių žmonių vardus ir jų amžių. Šalia esančioje lentelėje naudosime VLOOKUP rasti asmens vardą, pavardę ir amžių.
Įveskite šį kodą:
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
Dabar paleiskite makrokomandą. Pamatysite šią klaidą:
Tai yra vykdymo klaida. Kodėl taip atsitinka? Dar kartą pažvelkite į duomenų rinkinį:
Kaip matote, duomenų apie "Aaron" ir "Emma" nėra. Todėl vykdoma tik VLOOKUP Po to sustabdomas vykdymas. Dabar, jei norite ignoruoti klaidą ir tęsti likusių amžių paiešką, naudokite Dėl klaidos tęsti toliau pareiškimas.
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
Paleidę VBA kodą, pamatysite tokią išvestį:
Kaip matote, taikydami Dėl klaidos tęsti toliau komandą, ignoravome klaidą ir radome likusių asmenų amžių. Mūsų VBA kodas nerado jokių Aarono ir Emmos duomenų. Todėl jis ignoravo šias reikšmes ir grąžino likusias "Excel" darbalapio reikšmes.
Skaityti daugiau: [Pataisyta] "Excel" rado problemą, susijusią su viena ar daugiau formulės nuorodų šiame darbalapyje
"Excel" VBA pagalba išjunkite funkciją "Esant klaidai tęsti toliau
Gali būti, kad norėsite ignoruoti tam tikro VBA kodo segmento klaidas. Atminkite, kad jei VBA kode naudojate teiginį On Error Resume Next, visos po jo esančios klaidos bus praleistos. Jei norite tai išjungti ir įjungti klaidų tvarkymą kitame segmente, naudokite Dėl klaidos pereiti į 0 . Vėl bus įjungtas klaidų tvarkymas.
Bendras naudojimas:
Dalis error_handling()
Klaidų ignoravimas
Dėl klaidos tęsti toliau
// kodų eilutės
Kaip įjungti klaidų tvarkymą
Dėl klaidos pereiti į 0
//kodų eilutės
Pabaiga
Pažvelkite į toliau pateiktą VBA kodą:
Sub error_handling() Dim i As Long 'ignoruoti klaidą 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 'išjungti, kai klaida atnaujinama toliau On Error GoTo 0 MsgBox i / 0 End Sub
Anksčiau naudojome kodą, skirtą VLOOKUP funkciją. Čia pridėta papildoma kodo dalis, kad jums pademonstruotume. Mūsų kodas nekreips dėmesio į klaidas atliekant VLOOKUP tačiau klaidų tvarkymas bus įjungtas po to, kai Dėl klaidos pereiti į 0 pareiškimas.
Skaityti daugiau: "Excel VBA": Išjunkite "Dėl klaidos tęsti toliau"
VBA "Dėl klaidos pereiti į
Anksčiau aptariau klaidų tvarkymą naudojant metodą On Error. Visas mūsų straipsnis buvo apie Dėl klaidos tęsti toliau. Dabar taip pat yra dviejų tipų klaidų tvarkymas, kurį aptarsiu tolesniuose skyriuose.
1. VBA Dėl klaidos pereiti į 0
Svetainė Dėl klaidos Goto 0 teiginys yra integruotas "Excel" nustatymas, jei jūsų kodai neturi klaidų tvarkyklės. Iš esmės tai reiškia, kad kai VBA randa klaidą su Dėl klaidos pereiti į 0 , ji sustabdys kodo vykdymą ir parodys tradicinį klaidos pranešimo langą.
Dėl klaidos pereiti į 0 Šis teiginys iš esmės išjungia klaidų tvarkymą šioje procedūroje. 0 eilutė nėra klaidų tvarkymo kodo pradžia, net jei metode yra 0 numeriu pažymėta eilutė.
Pažvelkite į šį kodą:
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
Šį kodą jums jau rodėme. Šis kodas iš esmės paslepia visus dabartinio sąsiuvinio darbalapius. Dabar iš tiesų turiu papildomą kodo dalį su Dėl klaidos pereiti į 0 kad būtų parodyta klaida. Jei paleisite kodą, pamatysite šį vaizdą:
Ši klaida rodoma, nes aktyviajame sąsiuvinyje negali būti to paties pavadinimo lapų.
2. VBA Dėl klaidos pereiti į eilutę
Dabar taip pat galite nurodyti "Excel" paleisti kitą kodo segmentą, jei ras kokią nors klaidą, naudodami Dėl klaidos pereiti į eilutę . Jis nurodo "Excel" ką nors atlikti radus klaidą.
Linijos argumentas yra bet kuri eilutės žymė arba eilutės numeris. Jei mūsų kodas sukels kokią nors vykdymo metu atsirandančią klaidą, jis bus perkeltas į eilutę, sukeliant aktyvią vykdymo metu klaidos tvarkyklę. Atminkite, kad jūsų apibrėžta eilutė turi būti tiksliai toje pačioje procedūroje kaip ir teiginys On Error; priešingu atveju ji sukels kompiliavimo klaidą.
Pažvelkite į šį kodą:
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 "There is also a sheet with the same name. Try a different one." End Sub
Kodą matėte ankstesniame pavyzdyje. Kai naudojome Dėl klaidos pereiti į 0 , ji sukėlė klaidą. Tačiau čia ją pakeitėme į Dėl klaidos pereiti į eilutę pareiškimas.
Paleiskite kodą ir pamatysite šį vaizdą:
Kaip matote, nerodomas standartinis klaidos dialogo langas. Vietoj to rodomas pasirinktinis pranešimo langas, kurį sukūrėme error_handler segmentą. Kai "Excel" randa bet kokią klaidą, ji pereina į error_handler segmentą ir parodo pranešimo langą.
Taip pat naudojome Išeiti iš "Exit Sub Jei procedūros metu nėra lapo pavadinimu " VLOOKUP ", mūsų VBA kodas pervadins aktyvųjį lapą. Tada turime baigti vykdymą čia, nes mums nereikia tęsti klaidos tvarkyklės ir rodyti pranešimo lango.
"Excel" neveikia VBA "Dėl klaidos
Kartais, kad ir kaip stengtumėtės, metodas On Error neveikia. Anksčiau įgyvendinome Dėl klaidos metodą klaidoms tvarkyti. Tačiau kartais klaidos bus rodomos net ir tada, kai naudosite Dėl klaidos tęsti toliau arba Dėl klaidos pereiti į 0 . jūsų kode gali būti keletas priežasčių, kurias turite ištaisyti. neketinu jums to rodyti.
Pagrindinė VBA Dėl klaidos "Excel" neveikia įjungus "Excel" parinktį "Break on All Errors".
Atlikite šiuos veiksmus, kad tai išspręstumėte:
📌 Žingsniai
- Pirmiausia paspauskite Alt+F11 klaviatūroje, kad atidarytumėte VBA redaktorių.
- Dabar spustelėkite Įrankiai> parinktys.
- Po to spustelėkite Bendra skirtukas Parinktys dialogo langas.
- Čia galite pamatyti, " Pertrauka dėl visų klaidų " jau yra pažymėta. Tai iš esmės neleidžia tvarkyti klaidų.
- Norėdami jį pakeisti, pasirinkite parinktį " Pertrauka dėl neapdorotų klaidų " ir spustelėkite GERAI .
Tikiuosi, kad tai išspręs jūsų problemą, kai "Excel" programoje neveikia VBA "Dėl klaidos".
Skaityti daugiau: "Excel" vardo klaidos priežastys ir taisymai (10 pavyzdžių)
💬 Dalykai, kuriuos verta prisiminti
✎ Dėl klaidos tęsti toliau klaidos neištaisomos. Iš esmės klaida ignoruojama ir pereinama prie kito teiginio.
✎ "Excel" gaudo ir saugo vykdymo laiko klaidas Err objekte. Kai naudojame Dėl klaidos tęsti toliau teiginys ištrina Err objekto savybes.
✎ Galite išjungti Dėl klaidos tęsti toliau teiginį į savo VBA kodą "Excel" programoje, pridėdami Dėl klaidos pereiti į 0 pareiškimas.
Išvada
Baigdamas tikiuosi, kad ši pamoka suteikė jums naudingų žinių apie tai, kaip naudoti Dėl klaidos tęsti toliau Excel VBA. Rekomenduoju išmokti ir pritaikyti visus šiuos nurodymus savo duomenų rinkiniui. Atsisiųskite pratybų sąsiuvinį ir išbandykite juos patys. Taip pat nedvejodami pateikite atsiliepimus komentarų skiltyje. Jūsų vertingi atsiliepimai skatina mus kurti tokius vadovėlius kaip šis.
Nepamirškite patikrinti mūsų svetainės Exceldemy.com įvairių su "Excel" susijusių problemų ir sprendimų.
Nuolat mokykitės naujų metodų ir tobulėkite!