VBA tõrke korral jätkake järgmisel või minge 0

See õpetus selgitab VBA vigade jätkamise järgmine ja Goto Statement.

Isegi kui teie kood on täiuslikult üles ehitatud, ei pruugi kasutaja teha nii, nagu te ootaksite. Sel põhjusel peate sisestama oma koodi veatöötlejad alati, kui võib esineda tõrke põhjus.

Vea korral Jätka järgmist

Lause On Error Resume Next käsib VBA -l jätta vead sisaldavad koodirid vahele ja liikuda järgmisele reale. VBA ignoreerib rida või ridu, milles on viga, ja liigub järgmisele koodireale.

See on kasulik siis, kui ignoreeritav koodirida ei ole makro edukaks käitamiseks kriitilise tähtsusega, kuid võib vale kasutamise korral olla üsna ohtlik, kuna see võib anda tahtmatuid tulemusi.

Näiteks allolevas protseduuris:

123456 Alampeida kõik lehed ()Dim ws töölehenaIga tööpäeva jaoks ActiveWorkbookis. Lehedws.Visible = ValeJärgmine wsEnd Sub

Selle koodi käivitamisel kuvatakse tõrge, kuna me ei saa kõiki töövihiku töölehti peita - vähemalt üks töövihik peab jääma nähtavaks.

Kui aga muudame protseduuri, nagu allpool näidatud, jätkab kood veast mööda ja jätab töövihiku viimase lehe nähtavaks.

1234567 Alampeida kõik lehed ()Vea korral Jätka järgmistDim ws töölehenaIga tööpäeva jaoks ActiveWorkbookis. Lehedws.Visible = ValeJärgmine wsEnd Sub

Viga GoTo 0

Kui meie koodis pole veakäitlejat, Vea korral läks 0 on Exceli vaikeseade. See tähendab põhimõtteliselt seda, kui viga ilmneb Viga GoTo 0, Lõpetab VBA koodi täitmise ja kuvab oma standardveateate kasti, näiteks:

Kui oleme pannud vea lõksu nagu Vea korral Jätka järgmist meie koodis, kuid siis soovime vea vaikeseadetele tagasi seada, saame sisestada Vea korral läks 0 rida meie koodi.

12345678910 AlamvigaGoTo0 ()Vea korral Jätka järgmistDim ws töölehenaIga tööpäeva jaoks ActiveWorkbookis. Lehedws.Visible = ValeJärgmine wsViga GoTo 0"Käivitage siin rohkem koodi, näiteks:ActiveSheet.Name = "Leht1"End Sub

Nüüd, kui meie koodis peaks pärast viga olema mõni viga Vea korral läks 0 rida, ilmuks Exceli vaikeveateade. Selles näites on meil ActiveWorkbookis juba lehe nimega Sheet1 selle kohal oleva koodina Vea korral läks 0 peidab lehe, kuid ei kustuta seda. Seejärel kuvatakse Exceli vaikeveateade, mis näitab, et lehe nimi on juba võetud.

Vea korral minge Rida

Samuti võime sundida oma koodi teisaldama teisele koodireale, kasutades Viga Goto Rida mis käsib VBA -l vea ilmnemisel minna kindlale koodireale.

123456789101112 AlamvigaGoToLine ()Vea korral Jätka järgmistDim ws töölehenaIga tööpäeva jaoks ActiveWorkbookis. Lehedws.Visible = ValeJärgmine wsViga GoTo veakäitlejaActiveSheet.Name = "Leht1"Välju subeksija:MsgBox ("Seal on juba leht nimega sheet1!", VbCritical)End Sub

Ülaltoodud näites, kui kood leiab lehe „Sheet1”, liigub see veahalduri sildi all olevale koodireale - sel juhul kutsub see kohandatud sõnumikast, teavitades kasutajaid, et leht juba väljub. Veahalduri sildi järel peab olema koolon, et näidata VBA -le, et see on silt.

1 eksija:

Seejärel hüppab kood sildi all olevale reale ja tagastab kohandatud sõnumite kasti.

See on kasulik, kui te ei soovi, et teie kasutaja saaks teie koodi sisestamiseks klõpsata silumisel, kuna tavaline Exceli teade annab alati võimaluse koodi silumiseks.

Meil on vaja ka Välju sub menetluses. Kui seal on MITTE leht nimega Sheet1, siis käivitatakse see koodirida ja nimetatakse aktiivne leht ümber Sheet1 -ks. Seejärel tahame, et kood lõppeks - me ei taha, et see veahaldurile edasi kannaks ja sõnumikasti näitaks. Seejärel väljub alamrida Exit Sub ja peatab koodi.

Te aitate arengu ala, jagades leht oma sõpradega

wave wave wave wave wave