Þegar þú þarft að takast á við villur í Excel VBA geturðu notað OnError yfirlýsinguna. Hins vegar eru nokkur atriði sem þú þarft að vita fyrst. Þú getur notað On Error yfirlýsinguna á þrjá vegu.
| Setningafræði |
Hvað það gerir |
| Á Villa GoTo merki |
Eftir að hafa keyrt þessa yfirlýsingu, heldur VBA áfram framkvæmd á
yfirlýsingunni sem fylgir tilgreindu merkimiðanum. Þú verður að setja tvípunkt aftan
við merkimiðann svo að VBA viðurkenni það sem merki. |
| Við Villa GoTo 0 |
Eftir að hafa keyrt þessa yfirlýsingu, byrjar VBA aftur eðlilega
villuskoðunarhegðun. Notaðu þessa yfirlýsingu eftir að hafa notað eina af
hinum On Error yfirlýsingunum eða þegar þú vilt fjarlægja villumeðferð
í ferlinu þínu. |
| Á Villa Resume Next |
Eftir að hafa keyrt þessa yfirlýsingu hunsar VBA einfaldlega allar villur
og heldur áfram framkvæmd með næstu setningu. |
Heldur áfram eftir villu
Í sumum tilfellum vilt þú einfaldlega að rútínan ljúki þokkalega þegar villa kemur upp. Til dæmis gætirðu birt skilaboð sem lýsir villunni og hætt síðan ferlinu. (EnterSquareRoot5 dæmið sem sýnt var áðan notar þessa tækni.) Í öðrum tilfellum viltu endurheimta villuna, ef mögulegt er.
Til að endurheimta villu verður þú að nota Ferilskráryfirlýsingu. Þetta hreinsar villuástandið og gerir þér kleift að halda áfram framkvæmd á einhverjum stað. Þú getur notað Ferilskráryfirlýsinguna á þrjá vegu.
| Setningafræði |
Hvað það gerir |
| Halda áfram |
Framkvæmd hefst aftur með yfirlýsingunni sem olli villunni. Notaðu
þetta ef villumeðferðarkóði þinn lagar vandamálið og
það er í lagi að halda áfram. |
| Halda áfram Næst |
Framkvæmd hefst aftur með yfirlýsingunni strax á eftir
yfirlýsingunni sem olli villunni. Þetta hunsar í raun
villuna. |
| Ferilskrá merki |
Framkvæmd hefst aftur á merkimiðanum sem þú tilgreinir. |
Eftirfarandi dæmi notar ferilskráningu eftir að villa kemur upp:
Sub EnterSquareRoot6()
Dim Num As Variant
Dimm skilaboð sem strengur
Dim Ans As Heiltala
Reyndu aftur:
' Settu upp villumeðferð
Við Villa í GoTo BadEntry
' Biddu um gildi
Num = InputBox(„Sláðu inn gildi“)
Ef Num = ““ Hætta þá undir
' Settu inn veldisrótina
ActiveCell.Value = Sqr(Num)
Hætta undir
BadEntry:
Msg = Err.Number & “: “ & Error(Err.Number)
Msg = Msg & vbNewLine & vbNewLine
Msg = Msg & "Gakktu úr skugga um að svið sé valið,"
Msg = Msg & "blaðið er ekki varið, "
Msg = Msg & "og þú slærð inn óneikvætt gildi."
Msg = Msg & vbNewLine & vbNewLine & "Reyna aftur?"
Ans = MsgBox(Msg, vbYesNo + vbCritical)
Ef Ans = vbYes Haltu þá áfram Reyndu aftur
End Sub
Þessi aðferð hefur annað merki: TryAgain. Ef villa kemur upp heldur framkvæmdin áfram við BadEntry merkimiðann og kóðinn sýnir skilaboðin hér að neðan. Ef notandinn svarar með því að smella á Já, byrjar Ferilskrá yfirlýsingin og framkvæmdin hoppar aftur á TryAgain merkið. Ef notandinn smellir á Nei lýkur ferlinu.

Ef villa kemur upp getur notandinn ákveðið hvort hann reynir aftur.
Taktu eftir að villuboðin innihalda einnig villunúmerið ásamt „opinberu“ villulýsingunni.
Yfirlýsingin um Ferilskrá hreinsar villuástandið áður en haldið er áfram. Til að sjá þetta skaltu reyna að skipta eftirfarandi setningu út fyrir næstsíðustu setninguna í dæminu á undan:
Ef Ans = vbYes Farðu í Reyndu aftur
Kóðinn virkar ekki rétt ef þú notar GoTo frekar en Resume. Til að sýna fram á, sláðu inn neikvæða tölu. Þú færð villuboðið. Smelltu á Já til að reyna aftur og sláðu svo inn aðra neikvæða tölu. Þessi önnur villa er ekki föst vegna þess að upprunalega villuástandið var ekki hreinsað.
Villumeðferð í hnotskurn
Til að hjálpa þér að halda öllum þessum villumeðferðarviðskiptum á hreinu, hér er fljótleg og óhrein samantekt. Blokk af villumeðferðarkóða hefur eftirfarandi eiginleika:
-
Það byrjar strax á eftir merkinu sem tilgreint er í On Error yfirlýsingunni.
-
Það ætti aðeins að ná í fjölvi ef villa kemur upp. Þetta þýðir að þú verður að nota yfirlýsingu eins og Exit Sub eða Exit Function strax á undan merkinu.
-
Það gæti þurft yfirlýsingu um ferilskrá. Ef þú velur að hætta ekki við aðgerðina þegar villa kemur upp verður þú að framkvæma Ferilskráningu áður en þú ferð aftur í aðalkóðann.
Að vita hvenær á að hunsa villur
Í sumum tilfellum er fullkomlega í lagi að hunsa villur. Það er þegar yfirlýsingin On Error Resume Next kemur við sögu.
Eftirfarandi dæmi fer í gegnum hverja reit á völdu sviði og breytir gildinu í kvaðratrót þess. Þessi aðferð býr til villuboð ef einhver hólf í valinu inniheldur neikvæða tölu eða texta:
Sub SelectionSqrt()
Dimm reiti sem svið
Ef TypeName(Selection) <> “Range” Þá Hætta undir
Fyrir hvern reit í vali
cell.Value = Sqr(cell.Value)
Næsta klefi
End Sub
Í þessu tilviki gætirðu viljað einfaldlega sleppa hvaða reiti sem er sem inniheldur gildi sem þú getur ekki breytt í kvaðratrót. Þú getur búið til alls kyns villueftirlitsmöguleika með því að nota If-Then mannvirki, en þú getur hugsað þér betri (og einfaldari) lausn með því einfaldlega að hunsa villurnar sem koma upp.
Eftirfarandi venja framkvæmir þetta með því að nota yfirlýsinguna Á Villa Ferilskrá næsta:
Sub SelectionSqrt()
Dimm reiti sem svið
Ef TypeName(Selection) <> “Range” Þá Hætta undir
Á Villa Resume Next
Fyrir hvern reit í vali
cell.Value = Sqr(cell.Value)
Næsta klefi
End Sub
Almennt séð geturðu notað On Error Resume Next yfirlýsingu ef þú telur að villurnar séu skaðlausar eða ómarkvissar fyrir verkefni þitt.