VBA Subscript Out of Range (Napaka med izvajanjem '9') - Zakaj se ta napaka zgodi?

Excel VBA Subscript Out of Range

Subscript out of range je napaka, na katero naletimo v VBA, ko se poskušamo sklicevati na nekaj ali na spremenljivko, ki v kodi ne obstaja, na primer, domnevamo, da nimamo spremenljivke z imenom x, vendar na x uporabljamo funkcijo msgbox bo naletel na napačni indeks izven obsega.

Napaka VBA Subscript out of range se pojavi, ker objekt, do katerega želimo dostopati, ne obstaja. To je vrsta napake pri kodiranju VBA in to je »Napaka med izvajanjem 9«. Pomembno je razumeti koncepte za pisanje učinkovite kode, še pomembneje pa je razumeti napako kode VBA za učinkovito razhroščevanje kode.

Če imate napako pri kodiranju in ne veste, kaj je ta napaka, ko vas ni več.

Zdravnik ne more dati zdravila bolniku, ne da bi vedel, za katero bolezen gre. Zagotovo tako zdravniki kot bolniki vedo, da obstaja bolezen (napaka), vendar je pomembno, da bolezen (napaka) razumemo, kot da ji damo zdravila. Če napako popolnoma razumete, je veliko lažje najti rešitev.

V podobnem zapisu v tem članku bomo videli eno od pomembnih napak, s katerimi se običajno srečujemo, to je napaka »Subscript Out of Range« v programu Excel VBA.

Kaj je napaka Subscript out of Range Error v Excelu VBA?

Na primer, če se sklicujete na list, ki ga ni, je delovni zvezek, potem dobimo napako Run time 9: »Subscript out of Range«.

Če kliknete gumb Končaj, bo končan podproces, če kliknete na napak, vas bo pripeljal do vrstice kode, kjer je prišlo do napake, pomoč pa vas bo pripeljala na Microsoftovo spletno stran.

Zakaj pride do napake, ki ni v obsegu?

Kot sem že kot zdravnik povedal, da je treba pokojnega najti, preden razmišljam o zdravilu. Napaka VBA Subscript out of range se pojavi, ko vrstica kode ne prebere predmeta, ki smo ga vnesli.

Na primer, poglejte spodnjo sliko. Imam tri liste z imenom Sheet1, Sheet2, Sheet3.

Zdaj sem v kodo napisal kodo, da sem izbral list »Prodaja«.

Koda:

Sub Macro2 () Sheets ("Prodaja"). Izberite End Sub

Če zaženem to kodo s tipko F5 ali ročno, se mi na koncu prikaže napaka Run time 9: »Subscript out of Range«.

To je zato, ker sem poskušal dostopati do predmeta delovnega lista »Prodaja«, ki v delovnem zvezku ne obstaja. To je napaka med izvajanjem, ker je prišlo do napake med izvajanjem kode.

Druga pogosta napaka v podpisu je, ko se sklicujemo na delovni zvezek, ki ga ni. Na primer, poglejte spodnjo kodo.

Koda:

Sub Macro1 () Dim Wb As Set delovnega zvezka Wb = Workbooks ("Placa Sheet.xlsx") End Sub

Zgornja koda pravi, da bi morala biti spremenljivka WB enaka delovni knjigi "Plačni list.xlsx." Trenutno ta delovni zvezek ni odprt v mojem računalniku. Če to kodo zaženem ročno ali prek tipke F5, se prikaže napaka 9 časa izvajanja: »Subscript out of Range«.

Razlog za to je delovni zvezek, na katerega se sklicujem in ki odslej ni odprt ali sploh ne obstaja.

Napaka vpisnega indeksa VBA v nizih

Ko matriko deklarirate kot dinamično matriko in če v VBA ne uporabljate besede DIM ali REDIM za določanje dolžine matrike, običajno dobimo napako VBA Subscript out of range. Na primer, poglejte spodnjo kodo.

Koda:

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

V zgoraj navedenem sem spremenljivko razglasil kot matriko, vendar nisem določil začetne in končne točke; prej sem prvi matriki dodelil vrednost 25.

Če zaženem to kodo s tipko F5 ali ročno, bomo dobili napako 9 časa izvajanja: »Subscript out of Range«.

Da bi odpravil to težavo, moram z besedo Redim dodeliti dolžino polja.

Koda:

Sub Macro3 () Dim MyArray () Kot Long ReDim MyArray (1 do 5) MyArray (1) = 25 End Sub

Ta koda ne daje nobenih napak.

Kako prikazati napake na koncu kode VBA?

Če ne želite videti napake, medtem ko koda deluje, vendar na koncu potrebujete seznam napak, morate uporabiti upravljalnik napak »V nadaljevanju napake«. Poglejte spodnjo kodo.

Koda:

Sub Macro1 () Dim Wb As Workbook On Error Resume Next Set Wb = Workbooks ("Salary Sheet.xlsx") MsgBox Err.Description End Sub

Kot smo videli, bo ta koda vrgla napako med izvajanjem 9: »Subscript out of Range in Excel VBA . Toda pri zagonu kode moram uporabiti vodnik za napake On Error Resume Next v VBA. Ne bomo dobili nobenega sporočila o napaki. Na koncu sporočila na koncu mi prikaže tak opis napake.

Predlogo Excel VBA Subscription Out of Range lahko prenesete tukaj: - VBA Subscript Out of Range Predloga

Zanimive Članki...