ReDim 无效

不是每个数组都能重新设置维度。 此错误的原因和解决方案如下:

  • 一个变量隐式声明为 Variant, 而您试图用 ReDim 将它更改为数组。

    Variant 可以包含数组,但如果没有显式声明它,则无法使用 ReDim 将它更改为数组。 使用 ReDim 前需要声明 Variant 以指定它可以包含的元素数。 例如,在以下代码中, 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 支持和反馈,获取有关如何接收支持和提供反馈的指南。