VBA dėl klaidos tęskite toliau arba eikite į 0

Šioje pamokoje bus paaiškinta „VBA On Erume Resume Next“ ir „Goto Statement“.

Net jei jūsų kodas yra puikiai sukonstruotas, vartotojas gali elgtis ne taip, kaip tikitės. Dėl šios priežasties į savo kodą turite įterpti klaidų tvarkytojus, kai tik gali kilti priežastis.

Dėl klaidos Tęsti toliau

„On Error Resume Next“ sakinys nurodo VBA praleisti visas kodo eilutes, kuriose yra klaidų, ir pereiti prie kitos eilutės. VBA ignoruos eilutę ar eilutes, kuriose yra klaida, ir pereis prie kitos kodo eilutės.

Tai naudinga, kai kodo eilutė, kurios galima nepaisyti, nėra labai svarbi sėkmingam makrokomandos veikimui, tačiau gali būti gana pavojinga, jei naudojama neteisingai, nes gali duoti netyčinių rezultatų.

Pavyzdžiui, atlikdami toliau nurodytą procedūrą:

123456 Sub HideAllSheets ()Dim ws kaip darbalapisUž kiekvieną ws ActiveWorkbook.Sheetsws.Visible = NetiesaKitas wsPabaiga Sub

Jei paleisime šį kodą, gausime klaidą, nes negalime paslėpti visų darbaknygės darbalapių - bent viena darbaknygė turi likti matoma.

Tačiau jei pakeisime procedūrą, kaip parodyta žemiau, kodas ir toliau bus klaidingas, o paskutinis darbo knygos lapas bus matomas.

1234567 Sub HideAllSheets ()Dėl klaidos Tęsti toliauDim ws kaip darbalapisUž kiekvieną ws ActiveWorkbook.Sheetsws.Visible = NetiesaKitas wsPabaiga Sub

Klaida „GoTo 0“

Jei mūsų kode nėra klaidų tvarkytojo, Klaida Goto 0 yra numatytasis „Excel“ nustatymas. Tai iš esmės reiškia, kad kai įvyksta klaida Klaida „GoTo 0“, VBA nustos vykdyti kodą ir parodys standartinį klaidos pranešimo laukelį, pavyzdžiui:

Jei įdėjome klaidų spąstus kaip Dėl klaidos Tęsti toliau mūsų kode, bet tada norime iš naujo nustatyti klaidą į numatytąją, galime įterpti Klaida Goto 0 įrašykite eilutę į mūsų kodą.

12345678910 Antroji klaidaGoTo0 ()Dėl klaidos Tęsti toliauDim ws kaip darbalapisUž kiekvieną ws ActiveWorkbook.Sheetsws.Visible = NetiesaKitas wsKlaida „GoTo 0“„Vykdykite daugiau kodo, pavyzdžiui:ActiveSheet.Name = "Sheet1"Pabaiga Sub

Dabar, jei po kodo mūsų kode būtų klaida Klaida Goto 0 linija, atsiras numatytasis „Excel“ klaidos pranešimas. Šiame pavyzdyje „ActiveWorkbook“ jau turime lapą, pavadintą „Sheet1“ Klaida Goto 0 lapą slepia, bet neištrina. Tada bus rodomas numatytasis „Excel“ klaidos pranešimas, nurodantis, kad lapo pavadinimas jau buvo paimtas.

Įvyko klaida Linija

Taip pat galime priversti savo kodą pereiti į kitą kodo eilutę naudodami Dėl klaidos Goto Linija kuris nurodo VBA, jei įvyksta klaida, pereiti prie konkrečios kodo eilutės.

123456789101112 Sub ErrorGoToLine ()Dėl klaidos Tęsti toliauDim ws kaip darbalapisUž kiekvieną ws ActiveWorkbook.Sheetsws.Visible = NetiesaKitas wsApie klaidą „GoTo errhandler“ActiveSheet.Name = "Sheet1"Išeiti iš Subklaidų tvarkytojas:„MsgBox“ („Jau yra lapas, vadinamas„ sheet1! “, VbCritical)Pabaiga Sub

Pirmiau pateiktame pavyzdyje, kai kodas suranda lapą „Sheet1“, jis pereina į kodo eilutę po klaidų tvarkyklės etikete - šiuo atveju jis iškviečia pasirinktinį pranešimų laukelį, informuojantį vartotojus, kad lapas jau išeina. Klaidų tvarkyklės etiketėje turi būti dvitaškis, kad VBA parodytų, jog tai yra etiketė.

1 klaidų tvarkytojas:

Tada kodas pereis prie eilutės po etikete ir grąžins pasirinktinį pranešimų laukelį.

Tai naudinga, kai nenorite, kad jūsų vartotojas galėtų spustelėti Derinti, kad patektų į jūsų kodą, nes standartinis „Excel“ pranešimas visada suteikia galimybę derinti kodą.

Mums taip pat reikia Išeiti iš Sub procedūroje. Jeigu ten yra NE lapą, pavadintą „Sheet1“, tada ši kodo eilutė bus paleista ir aktyvų lapą pervardys į „Sheet1“. Tada norime, kad kodas pasibaigtų - nenorime, kad jis būtų perduotas klaidų tvarkytojui ir rodytų pranešimų laukelį. Po to eilutė Exit Sub išeina iš procedūros ir sustabdo kodą.

Padėsite svetainės plėtrą, dalintis puslapį su draugais

wave wave wave wave wave