Индекс на VBA извън обхвата (грешка по време на изпълнение '9') - Защо възниква тази грешка?

Excel VBA индекс извън обхвата

Индексът извън обхвата е грешка, която срещаме във VBA, когато се опитваме да се позовем на нещо или променлива, която не съществува в код, например, нека предположим, че нямаме променлива с име x, но използваме функцията msgbox на x ние ще срещне индекс извън грешка.

Възниква грешка на VBA Subscript извън обхвата, защото обектът, до който се опитваме да осъществим достъп, не съществува. Това е тип грешка при кодирането на VBA и това е „Грешка при изпълнение 9“. Важно е да разберете концепциите, за да напишете ефективен код, а още по-важно е да разберете грешката на вашия VBA код, за да отстраните грешките ефективно.

Ако вашата грешка в кодирането и не знаете каква е тази грешка, когато ви няма.

Лекарят не може да даде лекарство на своя пациент, без да знае какво е заболяването. Със сигурност както лекарите, така и пациентите знаят, че има заболяване (грешка), но е важно да се разбере болестта (грешка), отколкото да му се дава лекарство. Ако можете да разберете грешката перфектно, тогава е много по-лесно да намерите решението.

В подобна бележка в тази статия ще видим една от важните грешки, с които обикновено срещаме редовност, т.е. грешка „Индекс извън обхвата“ в Excel VBA.

Какво представлява грешката в индекса извън обхвата в Excel VBA?

Например, ако се позовавате на листа, който не е там, е работната книга, тогава ще получим грешка при изпълнение 9: „Индекс извън обхвата“.

Ако кликнете върху бутона Край, той ще прекрати подпроцедурата, ако щракнете върху отстраняване на грешки, ще ви отведе до реда с код, където е възникнала грешка, а помощта ще ви отведе до страницата на уебсайта на Microsoft.

Защо възниква грешка в индекса извън обхвата?

Както казах като лекар, важно е да намеря починалия, преди да помисля за лекарството. Грешка на VBA Subscript извън обхвата възниква, когато редът с код не чете въведения обект.

Например погледнете изображението по-долу. Имам три листа с име Sheet1, Sheet2, Sheet3.

Сега в кода написах кода, за да избера листа „Продажби“.

Код:

Sub Macro2 () Sheets („Продажби“). Изберете End Sub

Ако стартирам този код с помощта на клавиша F5 или ръчно, в крайна сметка ще получа грешка 9 на времето за изпълнение: „Индекс извън диапазона“.

Това е така, защото се опитах да вляза в обекта на работния лист „Продажби“, който не съществува в работната книга. Това е грешка по време на изпълнение, защото тази грешка е възникнала при изпълнение на кода.

Друга често срещана грешка в индекса, която получаваме, е когато се позоваваме на работната книга, която не е там. Например погледнете кода по-долу.

Код:

Sub Macro1 () Dim Wb As Workbook Set Wb = Workbooks ("Salary Sheet.xlsx") End Sub

Горният код казва, че променливата WB трябва да бъде равна на работната книга „Salary Sheet.xlsx.“ Към момента тази работна книга не се отваря на моя компютър. Ако стартирам този код ръчно или чрез клавиша F5, ще получа грешка 9 на времето за изпълнение: „Индекс извън обхвата“.

Това се дължи на работната книга, за която се позовавам, която или не е отворена към момента, или изобщо не съществува.

Грешка в индекса на VBA в масиви

Когато декларирате масива като динамичен масив и ако не използвате думата DIM или REDIM във VBA, за да определите дължината на масив, обикновено получаваме грешка на VBA Subscript извън обхвата. Например погледнете кода по-долу.

Код:

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

В горното съм декларирал променливата като масив, но не съм определил начална и крайна точка; по-скоро веднага присвоих на първия масив стойността 25.

Ако стартирам този код с помощта на клавиша F5 или ръчно тогава, ще получим грешка в времето за изпълнение 9: „Индекс извън обхвата“.

За да разреша този проблем, трябва да присвоя дължината на масив, като използвам думата Redim.

Код:

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

Този код не дава никакви грешки.

Как да покажа грешки в края на кода на VBA?

Ако не искате да виждате грешката, докато кодът е стартиран и работи, но се нуждае от списък с грешки в края, тогава трябва да използвате манипулатора за грешки „При възобновяване на грешка“. Погледнете кода по-долу.

Код:

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

Както видяхме, този код ще изведе грешка при изпълнение 9: „Индекс извън обхвата в Excel VBA . Но трябва да използвам манипулатора на грешки При възобновяване на грешка След това във VBA, докато изпълнявам кода. Няма да получим съобщения за грешка. По-скоро в крайното поле за съобщение ми показва описанието на грешката като това.

Можете да изтеглите шаблона на Excel VBA за индекс извън диапазона от тук: - Шаблон за индекс за VBA извън диапазона

Интересни статии...