Excel VBA-index a tartományon kívül
A tartományon kívül eső index olyan hiba, amelyet a VBA-ban tapasztalunk, amikor megpróbálunk hivatkozni valamire vagy egy olyan változóra, amely nem létezik egy kódban, tegyük fel például, hogy nincs x nevű változónk, de az msgbox függvényt használjuk az x-en tartományon kívüli indexekkel fog találkozni.
A VBA Subscript tartományon kívüli hibája azért fordul elő, mert az objektum, amelyhez megpróbálunk hozzáférni, nem létezik. Ez egy hibatípus a VBA kódolásban, és ez egy „Run Time Error 9”. Fontos megérteni a hatékony kódírás fogalmait, és még fontosabb megérteni a VBA-kód hibáját a kód hatékony hibakeresése érdekében.
Ha a kódolási hiba, és nem tudja, mi ez a hiba, amikor elment.
Az orvos nem adhat gyógyszert a betegének anélkül, hogy tudná, mi a betegség. Az biztos, hogy az orvosok és a betegek is tudják, hogy van betegség (hiba), de fontos megérteni a betegséget (hibát), mint gyógyszert adni hozzá. Ha tökéletesen megérti a hibát, akkor sokkal könnyebb megtalálni a megoldást.
A cikk hasonló megjegyzésében látni fogjuk az egyik fontos hibát, amellyel rendszerint rendszerességgel találkozunk, vagyis az „Excel alá eső index” tartományon kívüli hibát.
![](https://cdn.know-base.net/2634452/vba_subscript_out_of_range_run-time_error_9_why_this_error_occur_.png.webp)
Mi az Alaptartomány tartományon kívüli hiba az Excel VBA-ban?
Például, ha a munkalapot nem tartalmazó munkalapra hivatkozik, akkor a 9. futási hibát kapjuk : „Az alsó index tartományon kívül van.”
![](https://cdn.know-base.net/2634452/vba_subscript_out_of_range_run-time_error_9_why_this_error_occur__2.png.webp)
Ha a Befejezés gombra kattint, akkor az alfolyamat befejeződik, ha a hibakeresés gombra kattint, akkor a kódsorra kerül, ahol hibát észlelt, és a segítség a Microsoft webhelyére mutat.
Miért történik a tartományon kívüli index index hiba?
Mint orvosként elmondtam, fontos megtalálni az elhunytat, mielőtt a gyógyszerre gondolnék. A VBA Subscript tartományon kívüli hibája akkor fordul elő, amikor a kódsor nem olvassa el a beírt objektumot.
Nézze meg például az alábbi képet. Három lapom van, Sheet1, Sheet2, Sheet3.
![](https://cdn.know-base.net/2634452/vba_subscript_out_of_range_run-time_error_9_why_this_error_occur__3.png.webp)
Most a kódba beírtam a kódot az „Értékesítés” lap kiválasztásához.
Kód:
Sub Macro2 () Sheets ("Értékesítés"). Válassza az End Sub lehetőséget
![](https://cdn.know-base.net/2634452/vba_subscript_out_of_range_run-time_error_9_why_this_error_occur__4.png.webp)
Ha ezt a kódot az F5 billentyűvel vagy manuálisan futtatom, akkor a 9. futási hibát kapom : „Alcím kívül esik a tartományon”.
![](https://cdn.know-base.net/2634452/vba_subscript_out_of_range_run-time_error_9_why_this_error_occur_.gif)
Ennek oka az volt, hogy megpróbáltam elérni a „Sales” munkalap objektumot, amely nem létezik a munkafüzetben. Ez egy futási hiba, mert ez a hiba a kód futtatása közben történt.
Egy másik gyakori index-hiba, amikor a nem létező munkafüzetre hivatkozunk. Nézze meg például az alábbi kódot.
Kód:
1. makró1 () Dim Wb mint munkafüzetkészlet Wb = munkafüzetek ("Fizetési lap.xlsx") Vége alrész
![](https://cdn.know-base.net/2634452/vba_subscript_out_of_range_run-time_error_9_why_this_error_occur__5.png.webp)
A fenti kód szerint a WB változónak meg kell egyeznie a „Fizetési lap.xlsx” munkafüzettel. Mostantól ez a munkafüzet nem nyílik meg a számítógépemen. Ha manuálisan vagy az F5 kulcson futtatom ezt a kódot, akkor a 9. futási hibát kapom : „Az index az tartományon kívül van.”
![](https://cdn.know-base.net/2634452/vba_subscript_out_of_range_run-time_error_9_why_this_error_occur__2.gif)
Ez annak a munkafüzetnek köszönhető, amelyre hivatkozom, amely vagy jelenleg nincs nyitva, vagy egyáltalán nem létezik.
VBA-index hiba a tömbökben
Amikor a tömböt dinamikus tömbnek nyilvánítja, és ha nem a DIM vagy a REDIM szót használja a VBA-ban egy tömb hosszának meghatározásához, akkor általában a VBA Subscript tartományon kívüli hibát kapunk. Nézze meg például az alábbi kódot.
Kód:
Sub Macro3 () Dim MyArray () As Long MyArray (1) = 25 End Sub
![](https://cdn.know-base.net/2634452/vba_subscript_out_of_range_run-time_error_9_why_this_error_occur__6.png.webp)
A fentiekben deklaráltam a változót tömbként, de nem rendeltem kiinduló és végpontot; inkább az első tömböt rendeltem 25-re.
Ha ezt a kódot az F5 billentyűvel vagy manuálisan futtatom, akkor a 9. futási hibát kapjuk : „Az index az tartományon kívül van.”
![](https://cdn.know-base.net/2634452/vba_subscript_out_of_range_run-time_error_9_why_this_error_occur__3.gif)
A probléma megoldásához ki kell jelölnöm egy tömb hosszát a Redim szó használatával.
Kód:
Sub Macro3 () Dim MyArray () Amíg ReDim MyArray (1–5) MyArray (1) = 25 End Sub
![](https://cdn.know-base.net/2634452/vba_subscript_out_of_range_run-time_error_9_why_this_error_occur__7.png.webp)
Ez a kód nem ad hibát.
Hogyan lehet hibákat megjeleníteni a VBA kód végén?
Ha nem akarja látni a hibát, amíg a kód fut és fut, de a végén hibalistára van szüksége, akkor a „On Error Resume” hibakezelőt kell használnia. Nézze meg az alábbi kódot.
Kód:
1. makró1 () Dim Wb mint munkafüzet a hibáról Folytatás Következő készlet Wb = Munkafüzetek ("Fizetési lap.xlsx") MsgBox Err.Description End Sub
![](https://cdn.know-base.net/2634452/vba_subscript_out_of_range_run-time_error_9_why_this_error_occur__8.png.webp)
Mint láttuk, ez a kód dobja a 9. futási hibát: „Az index az tartományon kívül esik az Excel VBA-ban . De a kód futtatása közben a hibakezelőt kell használnom az On Error Resume Next alkalmazásban a VBA-ban. Nem kapunk hibaüzeneteket. Inkább a végén az üzenetmező mutatja az ilyen hibaleírást.
![](https://cdn.know-base.net/2634452/vba_subscript_out_of_range_run-time_error_9_why_this_error_occur__4.gif)
Az Excel VBA Subscript of Range Range sablonját itt töltheti le: - VBA Subscript Out Range Range sablon