ReDim 语句

过程级别 用于重新分配动态数组 变量的存储空间。

语法

ReDim [ Preserve ] varname ( 下标 ) [ Astype ], [ varname ( 下标 ) [ Astype ]] . . 。

ReDim 语句的语法包含以下部分:

Part 说明
保存 可选。 用于在您更改最后一个维度大小时保留现有数组中的数据的关键字
varname 必填。 变量的名称;紧跟命名约定的标准变量。
下标 必填。 数组变量的维度;最多可以声明 60 个维度。 下标参数使用以下语法:

[下限]upper [ , [lowerTo] upper ] . .

如果未在 lower 中显式声明,则数组的下限由 Option Base 语句控制。 如果不存在 Option Base 语句,则下限为零。
type 可选。 变量的数据类型;可以是字节布尔值、整数货币精度、双精度小数 (当前不支持) 、日期可变长度字符串 () 、固定长度字符串的字符串长度 () 、ObjectVariant用户定义类型对象类型

对要定义的每个变量使用单独的 As类型 子句。 对于包含数组的 Varianttype 描述数组的每个元素,但不会将 Variant 更改为某种其他类型。

备注

ReDim 语句用于调整动态数组的大小或调整其大小,该数组已使用带空括号的 PrivatePublicDim 语句进行正式声明, (没有维度下标) 。

重复使用 ReDim 语句更改数组中的元素和维度数。 但是,不能先声明一种数据类型的数组,然后使用 ReDim 将该数组更改为其他数据类型,除非该数组包含在 Variant 中。 如果数组包含在 Variant 中,则可以使用 As类型子句更改元素的类型,除非使用 Preserve 关键字 (keyword) ,在这种情况下,不允许更改数据类型。

如果使用 Preserve 关键字,则只能调整最后一个数组维度的大小,并且无法更改维度数目。 例如,如果您的数组只有一个维度,则可以调整该维度的大小,因为它既是最后一个维度,也是唯一的一个维度。 但是,如果数组有两个或更多维度,则只能更改最后一个维度的大小并保留数组的内容。

以下示例显示了如何增加动态数组的最后一个维度的大小,而不清除数组中包含的任何现有数据。

ReDim X(10, 10, 10) 
. . . 
ReDim Preserve X(10, 10, 15) 

类似地,当您使用 Preserve 时,您只能通过更改上限来更改数组大小;更改下限会导致错误。

如果减小数组大小,消除的元素中的数据将会丢失。

在初始化变量时,数值变量将初始化为 0,可变长度字符串将初始化为零长度字符串 (""),固定长度字符串将使用零填充。 将“变量”变量初始化为。 用户定义类型的变量的每个元素将会像它们是单独的变量那样初始化。

必须使用 Set 语句为引用对象的变量分配现有对象,然后才能使用它。 在为其分配对象之前,声明 的对象变量 具有特殊值 Nothing,指示它不引用对象的任何特定实例。

如果 ReDim 语句声明的变量在 模块级别过程级别不存在,则 ReDim 语句充当声明性语句。 如果之后创建具有相同名称的另一变量(甚至是在更宽的范围内),ReDim 也将引用后来创建的变量并且不一定会导致编译错误,即使 Option Explicit 生效。 若要避免此类冲突,不应将 ReDim 用作声明性语句,而是只用于重新设置数组维度。

注意

若要调整 Variant 中包含的数组的大小,您必须先显式声明 Variant 变量,然后再尝试调整其数组大小。

示例

此示例使用 ReDim 语句为动态数组变量分配和重新分配存储空间。 它假定 Option Base1

Dim MyArray() As Integer ' Declare dynamic array. 
Redim MyArray(5) ' Allocate 5 elements. 
For I = 1 To 5 ' Loop 5 times. 
 MyArray(I) = I ' Initialize array. 
Next I 

以下语句调整数组大小并清除元素。

Redim MyArray(10) ' Resize to 10 elements. 
For I = 1 To 10 ' Loop 10 times. 
 MyArray(I) = I ' Initialize array. 
Next I 

以下语句调整数组大小但不会清除元素。

Redim Preserve MyArray(15) ' Resize to 15 elements. 

另请参阅

支持和反馈

有关于 Office VBA 或本文档的疑问或反馈? 请参阅 Office VBA 支持和反馈,获取有关如何接收支持和提供反馈的指南。