VBA Subscript izvan dometa (pogreška u vremenu izvođenja '9') - Zašto se ova pogreška događa?

Excel VBA Subscript izvan dometa

Indeks izvan dosega je pogreška na koju nailazimo u VBA kada pokušavamo uputiti nešto ili varijablu koja ne postoji u kodu, na primjer, pretpostavimo da nemamo varijablu koja se zove x, ali koristimo funkciju msgbox na x we naići će na pogrešku izvan dometa.

Pojavljuje se pogreška VBA Subscripta izvan dosega jer objekt kojem pokušavamo pristupiti ne postoji. Ovo je vrsta pogreške u VBA kodiranju, a ovo je "Pogreška vremena izvođenja 9". Važno je razumjeti koncepte za pisanje efikasnog koda, a još je važnije razumjeti pogrešku vašeg VBA koda za učinkovito uklanjanje pogrešaka u kodu.

Ako je vaša pogreška u kodiranju i ne znate koja je ta pogreška kad vas više nema.

Liječnik ne može dati lijek svom pacijentu, a da ne zna koja je bolest. Svakako i liječnici i pacijenti znaju da postoji bolest (pogreška), ali važno je razumjeti bolest (pogrešku) nego davati joj lijek. Ako pogrešku možete savršeno razumjeti, mnogo je lakše pronaći rješenje.

Na sličnoj bilješci u ovom članku vidjet ćemo jednu od važnih pogrešaka s kojima se obično susrećemo redovito, tj. Pogrešku "Subscript Out of Range" u programu Excel VBA.

Što je pogreška indeksa izvan dometa u programu Excel VBA?

Na primjer, ako se pozivate na list koji nije, postoji radna knjiga, tada ćemo dobiti pogrešku Run time 9: "Subscript out of Range".

Ako kliknete gumb Završi, završit će potpostupak, ako kliknete na otklanjanje pogrešaka, odvest će vas do retka koda gdje je naišla na pogrešku, a pomoć će vas odvesti na stranicu Microsoftove web stranice.

Zašto se javlja pogreška izvan dometa indeksa?

Kao što sam rekao kao liječnik važno pronaći pokojnika prije razmišljanja o lijeku. Pogreška VBA Subscripta izvan dosega događa se kada redak koda ne pročita objekt koji smo unijeli.

Na primjer, pogledajte donju sliku. Imam tri lista s imenom Sheet1, Sheet2, Sheet3.

Sada sam u kodu napisao kôd za odabir lista "Prodaja".

Kodirati:

Sub Macro2 () listovi ("Prodaja"). Odaberite End Sub

Ako pokrenem ovaj kôd pomoću tipke F5 ili ručno, na kraju ću dobiti pogrešku Run time 9: "Subscript out of Range".

To je zato što sam pokušao pristupiti objektu radnog lista "Prodaja", koji ne postoji u radnoj knjizi. Ovo je pogreška vremena izvođenja jer se ta pogreška dogodila tijekom izvođenja koda.

Još jedna uobičajena pogreška u indeksu koju imamo je kada se referiramo na radnu knjigu koja nije tamo. Na primjer, pogledajte donji kod.

Kodirati:

Podmakronaredba1 () Zatamni Wb kao komplet radne knjige Wb = Radne knjige ("List plata.xlsx") Kraj pod

Gornji kôd kaže da bi varijabla WB trebala biti jednaka radnoj knjizi "Plata podataka.xlsx". Od sada se ova radna knjiga ne otvara na mom računalu. Ako ovaj kôd pokrenem ručno ili putem tipke F5, dobit ću pogrešku Run time 9: "Subscript out of Range."

To je zbog radne knjige na koju se pozivam ili koja od sada nije otvorena ili uopće ne postoji.

Pogreška VBA indeksa u nizovima

Kada deklarirate niz kao dinamički niz i ako u VBA ne upotrebljavate riječ DIM ili REDIM za definiranje duljine niza, obično dobijemo pogrešku VBA Subscript izvan opsega. Na primjer, pogledajte donji kod.

Kodirati:

Sub Macro3 () Zatamni MyArray () Dokle god MyArray (1) = 25 Kraj Sub

U gore navedenom, proglasio sam varijablu kao niz, ali nisam dodijelio početnu i završnu točku; nego sam odmah prvom nizu dodijelio vrijednost 25.

Ako ovaj kôd pokrenem pomoću tipke F5 ili ručno, dobit ćemo pogrešku Run time 9: "Subscript out of Range".

Da bih riješio ovaj problem, moram dodijeliti duljinu niza pomoću riječi Redim.

Kodirati:

Sub Macro3 () Zatamni MyArray () Kao dugo ReDim MyArray (1 do 5) MyArray (1) = 25 Kraj Sub

Ovaj kod ne daje nikakve pogreške.

Kako prikazati pogreške na kraju VBA koda?

Ako ne želite vidjeti pogrešku dok je kôd pokrenut, ali vam je potreban popis pogrešaka na kraju, tada morate upotrijebiti upravljač pogreškama "U nastavku greške". Pogledajte donji kod.

Kodirati:

Podmakronaredba Macro1 () Zatamni Wb kao radnu knjigu o grešci Nastavi sljedeći Postavi Wb = Radne knjige ("List plaće.xlsx") MsgBox Pogreška Opis Kraj Sub

Kao što smo vidjeli, ovaj će kôd izbaciti pogrešku Run time 9: „Subscript out of Range in Excel VBA . Ali moram koristiti upravljač pogreškama On Error Resume Next u VBA tijekom izvođenja koda. Nećemo dobiti poruke o pogrešci. Umjesto da mi na kraju poruke prikazuje ovaj opis pogreške.

Ovdje možete preuzeti Excel VBA Subscript Out of Range Predložak: - VBA Subscript Out of Range Predložak

Zanimljivi članci...