語法
ReDim [保留] varname ( 下標 ) [ 作為類型 ]、[varname ( 下標 ) [作為類型]] ......
ReDim 語句語法包含以下部分:
| 部分 | 描述 |
|---|---|
| 維 | 選用。 關鍵字用於在改變最後一個維度大小時,保留現有陣列中的資料。 |
| varname | 此為必要動作。 變數名稱;遵循標準變數命名規則。 |
| 下標 | 此為必要動作。 陣列變數的維度;最多可宣告 60 個多維度。
下標參數使用以下語法: [降低至]上[, [下至] 上方...... 當 lower 未明確說明時,陣列的下界由 Option Base 陳述式控制。 若不存在 選項基礎 陳述,下界為零。 |
| type | 選用。 變數的資料型態;可為位元組、布林、整數、長、貨幣、單、雙、十進位 (目前不支援的) 、Date、String ((可變長度字串) )、字串長度 ((固定長度字串) )、Object、Variant、使用者定義型態或物件型別。 每個定義的變數都用獨立 的 As類型 子句。 對於包含陣列的 變體 , 型別 描述陣列中每個元素的型別,但不會將 變體 改變為其他型別。 |
註解
ReDim 陳述式用於使用帶有空括號的 Private、Public 或 Dim 陳述式,) (表示已正式宣告的動態陣列大小。
反覆使用 ReDim 語句來改變陣列中的元素數量和維度。 不過,你不能宣告一個資料型別的陣列,然後用 ReDim 將陣列改成另一種資料型別,除非該陣列包含在 Variant 中。 若陣列包含於 Variant 中,則可透過 As類型 子句更改元素型別,除非你使用 Preserve 關鍵字,此時不允許更改資料型別。
如果你用 Preserve 關鍵字,你只能調整最後一個陣列維度的大小,且無法更改維度數量。 舉例來說,如果你的陣列只有一個維度,你可以調整那個維度,因為它是最後也是唯一的維度。 不過,如果你的陣列有兩個或以上維度,你可以只改變最後一個維度的大小,仍然保留陣列的內容。
以下範例展示了如何在不抹除陣列中現有資料的情況下,增加動態陣列最後一個維度的大小。
ReDim X(10, 10, 10)
. . .
ReDim Preserve X(10, 10, 15)
同樣地,使用 Preserve 時,只能透過改變上界來改變陣列大小;改變下界會產生錯誤。
如果你把陣列做得比原本更小,被刪除元素的資料就會遺失。
當變數初始化時,數值變數會被初始化為 0,可變長度的字串會初始化為零長度的字串 (“”) ,而固定長度的字串則被填入零。 變體 變數會初始化為 Empty。 使用者定義型態變數的每個元素都被初始化為獨立變數。
指向物件的變數必須先透過 Set 陳述式被指派給現有物件,才能使用。 在被指派物件之前,宣告的 物件變數 具有特殊值 Nothing,表示它不指向任何特定的物件實例。
如果 ReDim 宣告的變數在 模組層 級或 程序層級不存在,則它作為宣告式陳述式。 如果後來再建立同名變數,即使在更廣泛的 範圍內, ReDim 也會參考後續變數,即使 Option Explicit 生效,也不一定會造成編譯錯誤。 為避免此類衝突, ReDim 不應作為宣告語句使用,而僅用於重新維度陣列。
注意事項
要調整變 體中包含的陣列大小,必須在嘗試調整其陣列大小前,先明確宣 告該變 體變數。
範例
此範例使用 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 支援與意見反應。