Share via


ReDim 陳述式 (Visual Basic)

更新:2007 年 11 月

重新配置陣列變數的儲存空間。

ReDim [ Preserve ] name(boundlist) [ , name(boundlist) [, ... ] ]

參數

  • Preserve
    選擇項。修飾詞 (Modifier),在只變更最後一個維度的大小時,用於保留現有陣列中的資料。

  • name
    必要項。陣列變數的名稱。請參閱宣告項目名稱

  • boundlist
    必要項。重新定義之陣列中每個維度的範圍清單。

備註

您可以使用 ReDim 陳述式,變更已宣告之陣列中一個或多個維度的大小。如果陣列很大,而且不再需要其中的部分元素,則 ReDim 可以藉由減少陣列大小,釋放記憶體。另一方面,如果程式碼判斷陣列需要更多元素,ReDim 也可以加入元素。

ReDim 陳述式只適用於陣列,它對於純量 (只包含單一值的變數)、集合或結構是無效的。請注意,如果您將變數宣告為型別 Array,則 ReDim 陳述式不會有足夠的型別資訊可以建立新陣列。

您只能在程序層次使用 ReDim。這表示變數的「宣告內容」必須是程序,但不得為原始程式檔 (Source File)、命名空間 (Namespace)、介面、類別 (Class)、結構、模組或區塊。如需詳細資訊,請參閱宣告內容和預設存取層級

規則

  • 修飾詞:您只能指定 Preserve 修飾詞,而且指定修飾詞時無法省略 ReDim 關鍵字。

  • **多個變數。**您可以調整同一個宣告陳述式 (Declaration Statement) 中多個陣列變數的大小,方法是指定每個陣列變數的 name 和 boundlist 部分。變數之間以逗號 ( , ) 來分隔。

  • **陣列範圍。**boundlist 中的每個項目都可以指定該維度的下限 (Lower Bound) 和上限 (Upper Bound)。無論您是否指定下限,下限一律為零。上限則為該註標 (Subscript) 的最高可能值,而非維度的長度 (此為上限加一)。每個註標的值不同,有可能從零到上限值。

    boundlist 中的維度數目必須符合陣列的原始陣序。

  • **空白陣列。**您可以使用 -1 宣告陣列維度的上限。這表示陣列是空白的,但不是 Nothing (Visual Basic)。如需詳細資訊,請參閱 HOW TO:建立沒有元素的陣列。但是,Visual Basic 程式碼無法成功存取這類陣列。如果您嘗試這麼做,在執行期間會發生 IndexOutOfRangeException 錯誤。

  • **資料型別。**ReDim 陳述式無法變更陣列變數 (或其元素) 的資料型別。

  • **初始設定。**ReDim 陳述式無法提供陣列元素新的初始設定值。

  • **陣序。**ReDim 陳述式無法變更陣列的陣序 (維度的數目)。

  • **使用 Preserve 調整大小。**如果使用 Preserve,您只能調整陣列中最後一個維度的大小,而其他的維度就必須指定成現有陣列中維度的大小。

    例如,如果陣列只有一個維度,您便可以調整該維度的大小,同時仍保留所有陣列的內容,這是因為所變更的是最後一個,也是唯一的維度。不過,如果陣列有兩個或更多的維度,則如果您使用 Preserve,就只能變更最後一個維度的大小。

  • **屬性。**您可以在存有值陣列的屬性中使用 ReDim。

行為

  • 陣列取代:ReDim 會釋放現有的陣列,並以相同陣序建立一個新的陣列。新的陣列會取代被釋放陣列中的陣列變數。

  • 不使用 Preserve 進行初始設定:如果您未指定 Preserve,ReDim 會將新陣列的元素初始化為資料型別的預設值。

  • 使用 Preserve 進行初始設定:如果您指定 Preserve 修飾詞,Visual Basic 會將現有陣列的元素複製到新陣列。

範例

下列範例會增加動態陣列中最後一個維度的大小,且不遺失陣列中任何現有的資料,接著以遺失部分資料減少陣列的大小。最後,它會減少大小回到原始值,並重新初始化所有的陣列元素。

Dim intArray(10, 10, 10) As Integer
ReDim Preserve intArray(10, 10, 20)
ReDim Preserve intArray(10, 10, 15)
ReDim intArray(10, 10, 10)

第一個 ReDim 建立的新陣列會取代變數 intArray 中現有的陣列。ReDim 會將現有陣列的所有元素複製到新陣列。它還會在每層中的每一資料列結尾處多加入 10 個資料行,並將這些新資料行中的元素初始化為 0 (陣列之元素型別 Integer 的預設值)。

第二個 ReDim 建立另一個新陣列,並複製所有最適的元素。不過,每層中每一資料列的結尾會遺失五個資料行。若您已不使用這些資料行,這種情況並不會造成任何問題。減少大型陣列的大小,可以釋放您不再需要的記憶體。

第三個 ReDim 會再建立另一個新陣列,並從每層中的每一資料列結尾處再移除另外五個資料行。這一次,它不會複製任何現有的元素。這會讓陣列還原成原始的大小,並使所有元素回到原始的預設值。

請參閱

工作

HOW TO:建立沒有元素的陣列

概念

Visual Basic 6.0 使用者可用的 ReDim 陳述式

Visual Basic 6.0 使用者可用的陣列大小宣告

參考

Const 陳述式 (Visual Basic)

Dim 陳述式 (Visual Basic)

Erase 陳述式 (Visual Basic)

Nothing (Visual Basic)

IndexOutOfRangeException