Как исправить ошибку vba 9 (индекс вне диапазона)?
Индекс вне диапазона (время выполнения: ошибка 9)
Ошибка Subscript Out of Range (Run Time: Error 9) возникает, когда вы ссылаетесь на объект или пытаетесь использовать в коде переменную, которая не существует в коде, в этом случае VBA покажет эту ошибку. Поскольку каждый код, который вы пишете, уникален, причиной ошибки может быть следующий.

В следующем примере вы попытались активировать «Лист1», который является объектом. Но, как вы можете видеть в книге, листа с именем «Лист1» не существует (вместо этого у вас есть «Лист2»), поэтому VBA отображает «Индекс вне диапазона», чтобы сообщить вам, что с кодом что-то не так.

Индекс вне диапазона
Может возникнуть другая ситуация, когда вам придется столкнуться с ошибкой «Ошибка индекса вне диапазона», когда вы пытаетесь объявить динамический массив, но забываете использовать операторы DIM и ReDim для переопределения длины массива.

Теперь в приведенном выше коде у вас есть массив с именем «myArray», и чтобы сделать его динамическим, мы изначально оставляем длину массива пустой. Но прежде чем добавлять элемент, вам необходимо переопределить длину массива с помощью оператора ReDim.
И это ошибка, которую мы допустили в приведенном выше коде, и VBA вернул ошибку «Сценарий вне диапазона».
Sub myMacro() Dim myArray() As Variant myArray(1) = "One" End Sub
Как исправить индекс вне диапазона в Excel?
Лучший способ справиться с этим выходом за пределы диапазона индекса — написать эффективные коды и обязательно отладить написанный вами код (шаг за шагом).

Когда вы выполняете код шаг за шагом, вам легко узнать, в какой строке этого кода есть ошибка, потому что VBA покажет вам сообщение об ошибке 9 и выделит эту строку желтым цветом.
Еще вы можете использовать «обработчик ошибок» для перехода к определенной строке ошибки, когда она возникает.
В следующем коде мы написали строку для активации листа, но перед этим мы использовали оператор goto для перехода к обработчику ошибок. В обработчике ошибок у вас есть окно сообщения, в котором отображается сообщение об ошибке Err. Описание того, что произошла ошибка.

Итак, когда вы запускаете этот код, а «Лист1» отсутствует в книге, где вы пытаетесь его активировать. Он покажет вам окно сообщения, как показано ниже.

А если «Лист1» есть, сообщения вообще не будет.
Sub myMacro() Dim wks As Worksheet On Error GoTo myError Sheets("Sheet1").Activate myError: MsgBox "There's an error in the code: " & Err.Description & _ ". That means there's some problem with the sheet " & _ "that you want to activate" End Sub
Связанные руководства
- Обработка ошибок VBA
- Ошибка автоматизации VBA (ошибка 440)
- Ошибка VBA 400
- Ошибка, требующая объекта VBA (ошибка 424)
- Ошибка VBA «Недостаточно памяти» (ошибка 7)