VBA-prenumeration utom räckvidd (körtidsfel '9') - Varför uppstår detta fel?

Excel VBA-prenumeration utom räckhåll

Prenumeration utanför området är ett fel som vi stöter på i VBA när vi försöker referera till något eller en variabel som inte finns i en kod, till exempel, låt oss anta att vi inte har en variabel som heter x men vi använder msgbox-funktionen på x vi kommer att stöta på prenumeration utanför området.

VBA Subscript out of range-fel uppstår eftersom objektet vi försöker komma åt inte finns. Detta är en fel typ i VBA-kodning, och detta är ett "Run Time Error 9". Det är viktigt att förstå begreppen för att skriva effektiv kod, och det är ännu viktigare att förstå felet i din VBA-kod för att felsöka koden effektivt.

Om ditt kodfel och du inte vet vad det är när du är borta.

En läkare kan inte ge medicin till sin patient utan att veta vad sjukdomen är. Visst vet läkare och patienter att det finns en sjukdom (fel), men det är viktigt att förstå sjukdomen (fel) än att ge medicin till den. Om du förstår felet perfekt är det mycket lättare att hitta lösningen.

I en liknande anmärkning i den här artikeln kommer vi att se ett av de viktiga fel som vi vanligtvis stöter på regelbundenhet, dvs. "Subscript Out of Range" -fel i Excel VBA.

Vad är prenumeration utanför intervallet i Excel VBA?

Till exempel, om du hänvisar till arket som inte finns i arbetsboken, får vi Körtidsfel 9: "Subscript out of Range."

Om du klickar på Avsluta-knappen kommer det att avsluta underproceduren. Om du klickar på felsökning tar det dig till kodraden där det stötte på ett fel och hjälp tar dig till Microsofts webbplats.

Varför inträffar prenumeration utanför området?

Som jag sa som läkare viktigt att hitta den avlidne innan man tänker på medicinen. VBA Subscript out of range-fel inträffar när kodraden inte läser objektet vi angav.

Titta till exempel på bilden nedan. Jag har tre ark som heter Sheet1, Sheet2, Sheet3.

Nu i koden har jag skrivit koden för att välja arket "Försäljning."

Koda:

Sub Macro2 () Sheets ("Sales") Välj End Sub

Om jag kör den här koden med F5-tangenten eller manuellt kommer jag att få körtidsfelet 9: "Subscript out of Range."

Det beror på att jag försökte komma åt kalkylobjektet "Försäljning", som inte finns i arbetsboken. Detta är ett körtidsfel eftersom detta fel inträffade när koden kördes.

Ett annat vanligt abonnemangsfel vi får är när vi hänvisar till arbetsboken som inte finns där. Titta till exempel på koden nedan.

Koda:

Sub Macro1 () Dim Wb Som arbetsbokuppsättning Wb = Arbetsböcker ("Löneark.xlsx") Slut Sub

Ovanstående kod säger att variabel WB ska vara lika med arbetsboken ”Löneblad.xlsx.” Från och med nu öppnas inte den här arbetsboken på min dator. Om jag kör den här koden manuellt eller via F5-tangenten får jag körtidsfel 9: "Subscript out of Range."

Detta beror på den arbetsbok som jag hänvisar till, som antingen inte är öppen för närvarande eller inte existerar alls.

VBA-prenumerationsfel i matriser

När du förklarar matrisen som den dynamiska matrisen och om du inte använder ordet DIM eller REDIM i VBA för att definiera längden på en matris får vi vanligtvis VBA Subscript out of range error. Titta till exempel på koden nedan.

Koda:

Sub Macro3 () Dim MyArray () Så länge MyArray (1) = 25 End Sub

I ovanstående har jag deklarerat variabeln som en matris, men jag har inte tilldelat en start- och slutpunkt; snarare har jag genast tilldelat den första matrisen värdet 25.

Om jag kör den här koden med F5-tangenten eller manuellt kommer vi att få körtidsfel 9: "Subscript out of Range."

För att åtgärda det här problemet måste jag tilldela längden på en matris med Redim-ordet.

Koda:

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

Den här koden ger inga fel.

Hur visar jag fel i slutet av VBA-koden?

Om du inte vill se felet medan koden är igång men behöver en fellista i slutet måste du använda felhanteraren ”On Error Resume”. Titta på koden nedan.

Koda:

Undermakro1 () Dim Wb som arbetsbok vid fel Återuppta nästa uppsättning Wb = arbetsböcker ("Löneark.xlsx") MsgBox Err.Beskrivning Slut Sub

Som vi har sett kommer den här koden att köra körtidsfel 9: “Prenumeration utanför intervallet i Excel VBA . Men jag måste använda felhanteraren On Error Resume Next i VBA när jag kör koden. Vi får inga felmeddelanden. Snarare i slutet meddelandefältet visar mig felbeskrivningen så här.

Du kan ladda ner Excel VBA-prenumerationsmallen utom räckhåll här: - VBA-prenumerationsmallen utom räckhåll

Intressanta artiklar...