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, pavadinto x, bet mes naudojame msgbox funkciją x mes susidurs su indekso ribų ribų klaida.
VBA abonemento ribų klaida įvyksta, nes objekto, kurį bandome pasiekti, nėra. Tai yra klaidos tipas VBA kodavime ir tai yra „Vykdymo laiko klaida 9“. Svarbu suprasti sąvokas norint parašyti efektyvų kodą, o dar svarbiau suprasti savo VBA kodo klaidą, norint efektyviai derinti kodą.
Jei jūsų kodavimo klaida ir jūs nežinote, kas yra ta klaida, kai jūsų nebėra.
Gydytojas negali duoti vaistų savo pacientui, nežinodamas, kokia yra liga. Tikrai gydytojai ir pacientai abu žino, kad yra liga (klaida), tačiau svarbu suprasti ligą (klaidą), o ne suteikti jai vaistų. Jei klaidą galite suprasti puikiai, daug lengviau rasti sprendimą.
Panašioje šio straipsnio pastaboje pamatysime vieną iš svarbių klaidų, su kuriomis dažniausiai susiduriame, ty „Excel VBA“ klaida „Subscript Out Range“.
Kas yra „Excel VBA“ abonemento diapazono klaida?
Pvz., Jei jūs kreipiatės į lapą, kurio nėra, yra darbaknygė, tada gausime 9 vykdymo laiko klaidą: „Subscript out of Range“.
Jei spustelėsite mygtuką „Baigti“, tai baigs antrinę procedūrą, jei spustelėsite derinimą, pateksite į kodo eilutę, kurioje įvyko klaida, ir pagalba pateks į „Microsoft“ svetainės puslapį.
Kodėl įvyksta klaida?
Kaip man, kaip gydytojui, buvo svarbu surasti 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 „Sheet1“, „Sheet2“, „Sheet3“.
Dabar kode aš parašiau kodą, kad pasirinkčiau lapą „Pardavimai“.
Kodas:
Antrinis „Macro2“ () lakštai („Pardavimai“). Pasirinkite Baigti antrinį
Jei paleisiu šį kodą naudodamas F5 klavišą arba rankiniu būdu, gausiu 9 vykdymo laiko 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ą į darbo knygą, 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
Virš kodo sakoma, 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 mano nurodytos darbaknygės, kuri arba dabar nėra atidaryta, arba jos iš viso nėra.
VBA abonemento klaida masyvuose
Kai jūs deklaruojate masyvą kaip dinaminį masyvą ir jei nenaudojate žodžio DIM arba REDIM VBA, kad apibrėžtumėte masyvo ilgį, paprastai gauname VBA Subscript klaidą. 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 aš nepaskyriau pradžios ir pabaigos taškų, o aš iš karto priskyriau pirmajam masyvui vertę 25.
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 „Redim“ žodį.
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ų tvarkyklę „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ą: „Abonementas nepatenka į„ Excel VBA “ diapazoną . Bet aš turiu naudoti klaidų tvarkytuvę „VBA Resume Next“ VBA vykdant kodą, mes negausime jokių klaidų pranešimų, o pabaigoje pranešimo laukelyje man rodomas klaidos aprašymas.
Galite atsisiųsti „Excel VBA Subscript Out Range Range“ šabloną čia: - VBA Subscript Out of Range Template