Istruzione ReDim (Visual Basic)ReDim Statement (Visual Basic)

Rialloca lo spazio di archiviazione per una variabile di matrice.Reallocates storage space for an array variable.

SintassiSyntax

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

PartiParts

TermineTerm DefinizioneDefinition
Preserve Facoltativa.Optional. Modificatore utilizzato per conservare i dati nella matrice esistente quando si modifica soltanto la grandezza dell'ultima dimensione.Modifier used to preserve the data in the existing array when you change the size of only the last dimension.
name Obbligatoria.Required. Nome della variabile di matrice.Name of the array variable. Vedere Declared Element Names.See Declared Element Names.
boundlist Obbligatoria.Required. Elenco di limiti relativi a ogni dimensione della matrice ridefinita.List of bounds of each dimension of the redefined array.

NoteRemarks

È possibile utilizzare l'istruzione ReDim per modificare una o più dimensioni di una matrice che è stata già dichiarata.You can use the ReDim statement to change the size of one or more dimensions of an array that has already been declared. Se si dispone di una matrice di grandi dimensioni e alcuni degli elementi di questa non sono più necessari, ReDim consente di liberare memoria riducendo le dimensioni della matrice.If you have a large array and you no longer need some of its elements, ReDim can free up memory by reducing the array size. D’altra parte, se la matrice necessita di più elementi, ReDim è in grado di aggiungerli.On the other hand, if your array needs more elements, ReDim can add them.

L'istruzione ReDim è destinata solo alle matrici.The ReDim statement is intended only for arrays. Non è valida per valori scalari (variabili che contengono un unico valore), raccolte o strutture.It's not valid on scalars (variables that contain only a single value), collections, or structures. Tenere presente che se l'utente dichiara che una variabile è di tipo Array, l'istruzione ReDim non dispone di sufficienti informazioni sulla tipologia e non può creare la nuova matrice.Note that if you declare a variable to be of type Array, the ReDim statement doesn't have sufficient type information to create the new array.

Si può usare ReDim solo a livello di routine.You can use ReDim only at procedure level. Pertanto, il contesto della dichiarazione relativo alla variabile deve essere una routine. Di conseguenza, non può essere un file di origine, uno spazio dei nomi, un'interfaccia, una classe, una struttura, un modulo o un blocco.Therefore, the declaration context for the variable must be a procedure; it can't be a source file, a namespace, an interface, a class, a structure, a module, or a block. Per altre informazioni, vedere Contesti delle dichiarazioni e livelli di accesso predefiniti.For more information, see Declaration Contexts and Default Access Levels.

RegoleRules

  • Più variabili.Multiple Variables. È possibile ridimensionare diverse variabili di matrice nella stessa istruzione di dichiarazione e specificare il name e boundlist le parti per ogni variabile.You can resize several array variables in the same declaration statement and specify the name and boundlist parts for each variable. Nel caso di più variabili, è possibile separarle mediante virgole.Multiple variables are separated by commas.

  • Limiti della matrice.Array Bounds. Ogni voce in boundlist può specificare i limiti inferiore e superiore della dimensione.Each entry in boundlist can specify the lower and upper bounds of that dimension. Il limite inferiore è sempre pari a 0 (zero).The lower bound is always 0 (zero). Il limite superiore rappresenta il valore di indice più alto possibile per la dimensione, non la lunghezza della dimensione (vale a dire, il limite superiore più uno).The upper bound is the highest possible index value for that dimension, not the length of the dimension (which is the upper bound plus one). L'indice di ogni dimensione può variare tra 0 e il relativo valore di limite superiore.The index for each dimension can vary from 0 through its upper bound value.

    Il numero di dimensioni in boundlist deve corrispondere al numero originale di dimensioni (livello) della matrice.The number of dimensions in boundlist must match the original number of dimensions (rank) of the array.

  • Tipi di dati.Data Types. L'istruzione ReDim non può modificare il tipo di dati di una variabile di matrice o dei relativi elementi.The ReDim statement cannot change the data type of an array variable or its elements.

  • Inizializzazione.Initialization. L'istruzione ReDim non può fornire nuovi valori di inizializzazione per gli elementi della matrice.The ReDim statement cannot provide new initialization values for the array elements.

  • Rank.Rank. L'istruzione ReDim non può modificare il rango (numero di dimensioni) della matrice.The ReDim statement cannot change the rank (the number of dimensions) of the array.

  • Ridimensionamento con Preserve.Resizing with Preserve. Se si utilizza Preserve, è possibile ridimensionare solo l'ultima dimensione della matrice.If you use Preserve, you can resize only the last dimension of the array. Per ogni dimensione, è necessario specificare il limite della matrice esistente.For every other dimension, you must specify the bound of the existing array.

    Ad esempio, se la matrice contiene solo una dimensione, è possibile ridimensionarla e mantenere tutto il contenuto della matrice, poiché si sta modificando l'ultima e unica dimensione.For example, if your array has only one dimension, you can resize that dimension and still preserve all the contents of the array, because you are changing the last and only dimension. Tuttavia, se la matrice dispone di due o più dimensioni e si utilizza Preserve, è possibile modificare i valori soltanto per l'ultima dimensione.However, if your array has two or more dimensions, you can change the size of only the last dimension if you use Preserve.

  • Proprietà.Properties. È possibile utilizzare ReDim su una proprietà che include una matrice di valori.You can use ReDim on a property that holds an array of values.

ComportamentoBehavior

  • Sostituzione di matrici.Array Replacement. ReDim rilascia la matrice esistente e crea una nuova matrice con lo stesso rango.ReDim releases the existing array and creates a new array with the same rank. La nuova matrice sostituisce quella rilasciata nella variabile di matrice.The new array replaces the released array in the array variable.

  • Inizializzazione senza Preserve.Initialization without Preserve. Se non si specifica Preserve, ReDim Inizializza gli elementi della nuova matrice utilizzando il valore predefinito per il tipo di dati.If you do not specify Preserve, ReDim initializes the elements of the new array by using the default value for their data type.

  • Inizializzazione con Preserve.Initialization with Preserve. Se si specifica Preserve, Visual Basic copia gli elementi dalla matrice esistente alla nuova matrice.If you specify Preserve, Visual Basic copies the elements from the existing array to the new array.

EsempioExample

Nell'esempio seguente viene aumentata la grandezza dell'ultima dimensione di una matrice dinamica senza perdere i dati presenti nella matrice; in seguito, viene ridotta la dimensione con perdita di dati parziali.The following example increases the size of the last dimension of a dynamic array without losing any existing data in the array, and then decreases the size with partial data loss. Infine, viene ridotta la dimensione del relativo valore originale e vengono inizializzati di nuovo tutti gli elementi della matrice.Finally, it decreases the size back to its original value and reinitializes all the array elements.

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

L'istruzione Dim crea una nuova matrice con tre dimensioni.The Dim statement creates a new array with three dimensions. Ogni dimensione viene dichiarata con un limite pari a 10. In questo modo l'indice della matrice per ogni dimensione può essere compreso tra 0 e 10.Each dimension is declared with a bound of 10, so the array index for each dimension can range from 0 through 10. Nella seguente discussione, si fa riferimento alle tre dimensioni come livello, riga e colonna.In the following discussion, the three dimensions are referred to as layer, row, and column.

La prima ReDim crea una nuova matrice che sostituisce quella esistente nella intArray di variabile.The first ReDim creates a new array which replaces the existing array in variable intArray. ReDim copia tutti gli elementi dalla matrice esistente nella nuova matrice.ReDim copies all the elements from the existing array into the new array. Inoltre, consente di aggiungere altre 10 colonne alla fine di ogni riga di tutti i livelli e consente di inizializzare gli elementi in queste nuove colonne su 0 (valore predefinito) di Integer, ovvero il tipo di elemento della matrice.It also adds 10 more columns to the end of every row in every layer and initializes the elements in these new columns to 0 (the default value of Integer, which is the element type of the array).

La seconda ReDim crea una nuova matrice e copia tutti gli elementi adeguati.The second ReDim creates another new array and copies all the elements that fit. Tuttavia, cinque colonne vengono perse alla fine di ogni riga relativa a ogni livello.However, five columns are lost from the end of every row in every layer. Ciò non rappresenta un problema se l'utente non ha più la necessità di utilizzare tali colonne.This is not a problem if you have finished using these columns. La riduzione delle dimensioni di una grande matrice può liberare memoria che non è più necessaria.Reducing the size of a large array can free up memory that you no longer need.

La terza ReDim crea una nuova matrice e rimuove altre cinque colonne dalla fine di ogni riga relativa a ogni livello.The third ReDim creates another new array and removes another five columns from the end of every row in every layer. Questa volta non copia gli elementi esistenti.This time it does not copy any existing elements. Questa istruzione consente di ripristinare le dimensioni originali della matrice.This statement reverts the array to its original size. Dal momento che l'istruzione non include il modificatore Preserve, imposta i valori predefiniti originali di tutti gli elementi della matrice.Because the statement doesn't include the Preserve modifier, it sets all array elements to their original default values.

Per altri esempi, vedere matrici.For additional examples, see Arrays.

Vedere ancheSee also