ReDim 陳述式

用於 程式層級 ,以重新配置動態數 組變數的儲存空間。

語法

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

ReDim語句語法包含下列部分:

部分 描述
保存 選用。 當您變更最後一個維度的大小時,用來保留現有陣列中資料的關鍵字
varname 此為必要動作。 變數的名稱;遵循標準變數命名慣例。
下標 此為必要動作。 陣列變數的維度;最多可以宣告 60 個多個維度。 下標自變會使用下列語法:

[lowerTo] upper [ , [lowerTo] upper ] . . . .

若未在 下方明確陳述,則陣列的下限是由 Option Base 語句所控制。 如果沒有 Option Base 語句,則下限為零。
type 選用。 變數的資料類型 ;可能是目前不支援的 ByteBooleanIntegerLongCurrencySingleDoubleDecimal () 、 DateString (,適用于可變長度字串) 、 固定長度 字串 () 、 ObjectVariant使用者定義型別物件類型

針對所定義的每個變數使用個別的 As類型 子句。 針對包含陣列 的 Varianttype 會描述陣列中每個元素的類型,但不會將 Variant 變更為其他類型。

註解

ReDim語句可用來調整或調整已使用PrivatePublicDim語句正式宣告的動態陣列大小,其具有空白括弧 (不含維度下標) 。

重複使用 ReDim 語句來變更陣列中的專案和維度數目。 不過,您無法宣告一個資料類型的陣列,稍後使用 ReDim 將陣列變更為另一個資料類型,除非陣列包含在 Variant中。 如果陣列包含在 Variant中,則可以使用 As類型 子句來變更元素的類型,除非您使用 Preserve 關鍵字,在此情況下,不允許變更資料類型。

如果您使用 Preserve 關鍵字,則只能調整最後一個陣列維度的大小,而且完全無法變更維度的數目。 例如,如果您的陣列只有一個維度,您可以調整該維度的大小,因為它是最後一個且唯一的維度。 不過,如果您的陣列有兩個或多個維度,您可以只變更最後一個維度的大小,並且仍然保留陣列的內容。

下列範例示範如何增加動態陣列最後一個維度的大小,而不需要清除陣列中包含的任何現有資料。

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

同樣地,當您使用 Preserve時,只能藉由變更上限來變更陣列的大小;變更下限會導致錯誤。

如果您讓陣列小於它,則排除元素中的資料將會遺失。

當變數初始化時,數值變數會初始化為 0、變數長度字串會初始化為零長度字串 (「」) ,而固定長度字串則會填入零。 Variant 變數會初始化為 空白。 使用者定義型別變數的每個專案都會初始化,就像是個別的變數一樣。

參考物件的變數必須先使用 Set 語句來指派現有的物件,才能使用它。 在指派物件之前,宣告的 物件變數 具有特殊值 Nothing,表示它不會參考物件的任何特定實例。

如果宣告的變數不存在於模組層級程式層級則 ReDim語句會作為宣告語句。 如果稍後建立另一個同名的變數,即使是在較寬 的範圍中, ReDim 也會參考較新的變數,而且即使 Option Explicit 有效,也不一定會造成編譯錯誤。 若要避免這類衝突, ReDim 不應作為宣告式語句,而只是用於轉譯陣列。

注意事項

若要調整 Variant中所含陣列的大小,您必須先明確宣告 Variant 變數,再嘗試調整其陣列的大小。

範例

此範例會使用 ReDim 語句來配置和重新配置動態陣列變數的儲存空間。 它假設 選項基底1

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 支援與意見反應