Поделиться через


Недопустимый оператор ReDim

Не для всех массивов можно изменить размер измерений. Эта ошибка имеет следующие причины и решения:

  • Переменная неявно объявлена в переменной Variant и для ее преобразования в массив используется ReDim.

    Переменная Variant может содержать массив, однако, если она не объявлена явно, нельзя использовать ReDim для ее преобразования в массив. Необходимо объявить переменную Variant перед тем, как использовать ReDim для задания количества элементов, которые он может содержать. Например, в следующем коде ReDim AVar(10) вызывает недопустимую ошибку ReDim , но ReDim BVar(10) не:

AVar = 1    ' Implicit declaration of AVar. 
ReDim AVar(10)    ' Causes invalid ReDim error. 
'. 
'. 
'. 
Dim BVar    ' Explicit declaration of BVar. 
ReDim BVar(10)    ' No error. 
  • Вы пытались использовать ReDim для изменения нескольких измерений массива, содержащегося в переменной Variant. Можно использовать только ReDim, чтобы изменить размер последнего измерения массива в переменной Variant. Чтобы создать массив с несколькими измерениями, размер которых можно изменить, массив нельзя помещать в переменную Variant; также необходимо объявить его обычным способом.

  • Используйте ReDim только для изменения количества элементов в обычном массиве, а не типа этих элементов. Чтобы создать массив, в котором можно изменять типы элементов, следует использовать массив, который содержится в переменной Variant. Если сначала объявить массив, изменить типы и количество элементов массива можно следующим образом:

Dim MyVar As Variant    ' Declare the variable. 
ReDim MyVar(10) As String    ' ReDim it as array of String subtypes. 
ReDim MyVar(20) As Integer    ' ReDim it as array of Integer subtypes. 
ReDim MyVar(5) As Variant    ' ReDim it as array of Variant subtypes. 

  • Вы пытались использовать ReDim для массива, который является компонентом объекта Automation.

    Удалите ReDim.

    Примечание Если не указать тип для переменной, переменная получает тип по умолчанию Variant. Это очевидно не во всех случаях. Например, в приведенном ниже коде объявляются две переменные: первая, MyVar, имеет тип Variant; вторая, AnotherVar, имеет тип Integer.

Dim MyVar, AnotherVar As Integer 

Для получения дополнительной информации выберите необходимый элемент и нажмите клавишу F1 (для Windows) или HELP (для Macintosh).

Поддержка и обратная связь

Есть вопросы или отзывы, касающиеся Office VBA или этой статьи? Руководство по другим способам получения поддержки и отправки отзывов см. в статье Поддержка Office VBA и обратная связь.