VBA-alaindeksi alueen ulkopuolella (ajonaikainen virhe '9') - Miksi tämä virhe tapahtuu?

Excel VBA -indeksi on kantaman ulkopuolella

Alitunnus rajojen ulkopuolella on virhe, jonka kohtaamme VBA: ssa, kun yritämme viitata johonkin tai muuttujaan, jota ei ole koodissa, esimerkiksi oletetaan, että meillä ei ole muuttujaa nimeltä x, mutta käytämme x havaitsee alaindeksin alueen ulkopuolella olevan virheen.

VBA-alaindeksin ulkopuolella oleva virhe tapahtuu, koska objektia, jota yritämme käyttää, ei ole. Tämä on virhetyyppi VBA-koodauksessa, ja tämä on ”Run Time Error 9”. On tärkeää ymmärtää käsitteet tehokkaan koodin kirjoittamiseksi, ja vielä tärkeämpää on ymmärtää VBA-koodisi virhe koodin tehokkaan virheen selvittämiseksi.

Jos koodausvirheesi ja et tiedä mikä virhe on, kun olet poissa.

Lääkäri ei voi antaa lääkkeitä potilaalleen tietämättä mikä sairaus on. Lääkärit ja potilaat tietävät varmasti sairauden (virheen), mutta on tärkeää ymmärtää sairaus (virhe) kuin antaa lääkettä sille. Jos ymmärrät virheen täydellisesti, ratkaisun löytäminen on paljon helpompaa.

Tämän artikkelin vastaavassa huomautuksessa näemme yhden tärkeistä virheistä, joita tavallisesti kohtaamme säännöllisyydellä, eli Excel VBA: n "Subcript Out of Range" -virhe.

Mikä on alaindeksin alueen ulkopuolella oleva virhe Excel VBA: ssa?

Esimerkiksi, jos viitataan taulukkoon, jota ei ole, on työkirja, saamme Suoritusaika-virheen 9: "Alaindeksi alueen ulkopuolella."

Jos napsautat Lopeta-painiketta, se lopettaa alimenettelyn, jos napsautat virheenkorjausta, se vie sinut koodiriville, jossa siinä tapahtui virhe, ja ohje vie sinut Microsoftin verkkosivulle.

Miksi virhe alaosakkeen ulkopuolella?

Kuten kerroin lääkärinä tärkeäksi löytää kuolleen ennen lääkkeen miettimistä. VBA-alaindeksin ulkopuolella oleva virhe tapahtuu, kun koodirivi ei lue syöttämäämme objektia.

Katso esimerkiksi alla olevaa kuvaa. Minulla on kolme arkkia nimeltä Sheet1, Sheet2, Sheet3.

Nyt koodiin olen kirjoittanut koodin valitaksesi ”Myynti” -arkin.

Koodi:

Alimakro2 () Arkit ("Myynti"). Valitse Lopeta ali

Jos suoritan tämän koodin F5-näppäimellä tai manuaalisesti, saan lopulta Run Time -virheen 9: "Subscript out of Range".

Tämä johtuu siitä, että yritin käyttää laskentataulukko-objektia "Myynti", jota ei ole työkirjassa. Tämä on ajoaikavirhe, koska tämä virhe tapahtui koodia suoritettaessa.

Toinen yleinen alaindeksivirhe, jonka saamme, on, kun viitataan työkirjaan, jota ei ole siellä. Katso esimerkiksi alla oleva koodi.

Koodi:

Alimakro1 () Dim Wb Työkirjaryhmänä Wb = Työkirjat ("Palkkotaulukko.xlsx") Loppu

Yllä olevan koodin mukaan muuttujan WB tulee olla yhtä suuri kuin työkirja "Palkkotaulukko.xlsx". Tätä työkirjaa ei tällä hetkellä avata tietokoneellani. Jos suoritan tämän koodin manuaalisesti tai F5-avaimen kautta, saan Suoritusaika-virheen 9: "Subscript out of Range".

Tämä johtuu viittaamastani työkirjasta, joka joko ei ole auki tällä hetkellä tai sitä ei ole ollenkaan.

VBA-alaindeksivirhe matriiseissa

Kun ilmoitat taulukon dynaamiseksi taulukoksi ja jos et käytä sanaa DIM tai REDIM VBA: ssa matriisin pituuden määrittelemiseen, saamme VBA-alaindeksin yleensä alueen virheestä. Katso esimerkiksi alla oleva koodi.

Koodi:

Alimakro3 () Dim MyArray () Niin pitkä MyArray (1) = 25 End Sub

Edellä mainitsin muuttujan taulukoksi, mutta en ole määrittänyt alku- ja loppupistettä; pikemminkin olen heti määrittänyt ensimmäisen taulukon arvon 25.

Jos suoritan tämän koodin F5-näppäimellä tai manuaalisesti, saamme Suoritusaika-virheen 9: "Alaindeksi alueen ulkopuolella."

Tämän ongelman korjaamiseksi minun on määritettävä matriisin pituus käyttämällä Redim-sanaa.

Koodi:

Alimakro3 () Dim MyArray () Niin kauan ReDim MyArray (1-5) MyArray (1) = 25 End Sub

Tämä koodi ei anna virheitä.

Kuinka näyttää virheitä VBA-koodin lopussa?

Jos et halua nähdä virhettä koodin ollessa käynnissä, mutta tarvitset virheluettelon lopussa, sinun on käytettävä ”On Error Resume” -virheenkäsittelijää. Katso alla oleva koodi.

Koodi:

Alimakro1 () Dim Wb Työkirjana virheenä Jatka Seuraava sarja Wb = Työkirjat ("Palkkotaulukko.xlsx") MsgBox Err.Description End Sub

Kuten olemme nähneet, tämä koodi heittää ajoaikavirheen 9: “Alaindeksi on alueen ulkopuolella VBA: ssa . Mutta minun on käytettävä virheenkäsittelijää On Error Resume Next VBA: ssa, kun suoritan koodia. Emme saa virheilmoituksia. Pikemminkin lopussa viesti -ruutu näyttää minulle tämän virheen kuvauksen.

Voit ladata Excelin VBA-alaindeksin alueen ulkopuolella olevasta mallista täältä: - VBA-alaindeksin alueen ulkopuolella olevasta mallista

Mielenkiintoisia artikkeleita...