VBA abonementas už diapazono ribų (vykdymo laiko klaida „9“) - Kodėl įvyksta ši klaida?

„Excel VBA“ indeksas nepatenka į diapazoną

Indeksas už diapazono ribų yra klaida, su kuria susiduriame VBA, kai bandome nurodyti ką nors ar kintamąjį, kurio nėra kode, tarkime, tarkime, kad mes neturime kintamojo pavadinimu x, bet x mes naudojame msgbox funkciją aptiks paklaidos diapazono ribų klaidos

VBA abonemento klaida neviršija diapazono, nes objekto, kurį bandome pasiekti, nėra. Tai yra klaidos tipas VBA kodavime ir tai yra „Run Time Error 9“. Svarbu suprasti sąvokas, norint parašyti efektyvų kodą, ir dar svarbiau suprasti savo VBA kodo klaidą, norint efektyviai derinti kodą.

Jei jūsų kodavimo klaida ir jūs nežinote, kokia ta klaida, kai jūsų nebėra.

Gydytojas negali duoti vaistų savo pacientui, nežinodamas, kokia yra liga. Tikrai, tiek gydytojai, tiek pacientai žino, kad yra liga (klaida), tačiau svarbu suprasti ligą (klaidą), o ne suteikti jai vaistų. Jei klaidą galite suprasti puikiai, tada rasti sprendimą yra daug lengviau.

Panašioje šio straipsnio pastaboje pamatysime vieną iš svarbių klaidų, su kuriomis dažniausiai susiduriame reguliariai, ty „Excel VBA“ klaida „Subscript Out Range“.

Kas yra „Excel VBA“ abonemento diapazono klaida?

Pvz., Jei turite omenyje lapą, kurio nėra darbaknygėje, gausime 9 vykdymo laiko klaidą: „Subscript out of Range“.

Jei spustelėsite mygtuką „Baigti“, tai užbaigs antrinę procedūrą, jei spustelėsite derinimą, nukreipsite į kodo eilutę, kurioje įvyko klaida, o pagalba pateks į „Microsoft“ svetainės puslapį.

Kodėl įvyksta klaida?

Kaip man, kaip gydytojui, buvo pasakyta, svarbu rasti mirusįjį prieš galvojant apie vaistą. VBA abonemento ribų klaida įvyksta, kai kodo eilutė neskaito įvesto objekto.

Pavyzdžiui, pažiūrėkite į žemiau esantį vaizdą. Turiu tris lapus, pavadintus Lapas1, Lapas2, Lapas3.

Dabar kode parašiau kodą, kad pasirinkčiau lapą „Pardavimai“.

Kodas:

Antrasis „Macro2“ () lakštai („Pardavimai“). Pasirinkite Baigti antrinį

Jei paleisiu šį kodą naudodamas F5 klavišą arba rankiniu būdu, galų gale gausiu 9 vykdymo klaidą: „Subscript out of Range“.

Taip yra todėl, kad bandžiau pasiekti darbalapio objektą „Pardavimai“, kurio darbaknygėje nėra. Tai vykdymo laiko klaida, nes ši klaida įvyko vykdant kodą.

Kita dažna indekso klaida, kai gauname nuorodą į darbaknygę, kurios nėra. Pavyzdžiui, pažvelkite į žemiau pateiktą kodą.

Kodas:

1 makrokomanda () Dim Wb kaip darbaknygės rinkinys Wb = Darbaknygės („Atlyginimų lapas.xlsx“) Pabaiga

Aukščiau pateiktas kodas sako, kad kintamasis WB turėtų būti lygus darbaknygei „Atlyginimų lapas.xlsx“. Nuo šiol ši darbaknygė mano kompiuteryje nėra atidaryta. Jei paleisiu šį kodą rankiniu būdu arba naudodamas klavišą F5, gausiu 9 vykdymo laiko klaidą: „Subscript out of Range“.

Taip yra dėl to, kad turiu omenyje darbaknygę, kuri dabar nėra atidaryta arba jos iš viso nėra.

VBA abonemento klaida masyvuose

Kai masyvą paskelbiate dinaminiu masyvu ir jei nenorite naudoti žodžio DIM arba REDIM VBA, kad apibrėžtumėte masyvo ilgį, dažniausiai gauname VBA abonemento klaidą iš diapazono. Pavyzdžiui, pažvelkite į žemiau pateiktą kodą.

Kodas:

Sub Macro3 () Dim MyArray () As Long MyArray (1) = 25 End Sub

Pirmiau aš paskelbiau kintamąjį kaip masyvą, bet nepaskyriau pradžios ir pabaigos taško; Pirmą masyvą iš karto priskyriau 25 reikšmei.

Jei paleisiu šį kodą naudodamas F5 klavišą arba rankiniu būdu, gausime 9 vykdymo laiko klaidą: „Subscript out of Range“.

Norėdami išspręsti šią problemą, turiu priskirti masyvo ilgį naudodamas žodį Redim.

Kodas:

Sub Macro3 () Dim MyArray () Kaip ilgai ReDim MyArray (1–5) MyArray (1) = 25 End Sub

Šis kodas klaidų nepateikia.

Kaip parodyti klaidas VBA kodo pabaigoje?

Jei nenorite matyti klaidos, kol kodas veikia ir veikia, bet pabaigoje reikia klaidų sąrašo, turite naudoti klaidų tvarkytuvą „On Error Resume“. Pažvelkite į žemiau esantį kodą.

Kodas:

Sub Macro1 () Dim Wb Kaip klaidų darbaknygė Atnaujinti Kitas rinkinys Wb = Darbaknygės („Atlyginimų lapas.xlsx“) MsgBox Err.Description End Sub

Kaip matėme, šis kodas išmes 9 vykdymo laiko klaidą: „„ Excel “VBA abonementas nepatenka į diapazoną . Bet vykdydamas kodą turiu naudoti klaidų tvarkytuvę „On Error Resume Next“ VBA. Mes negausime jokių klaidų pranešimų. Greičiau pranešimo laukelyje man rodomas toks klaidos aprašymas.

Galite atsisiųsti „Excel VBA Subscript Out Range Range“ šabloną čia: - VBA Subscript Out of Range Template

Įdomios straipsniai...