Contenuto

# Istruzione ReDim

Dichiara o ridefinisce le variabili o le matrici.

### Sintassi:

    ReDim [Preserve] variabile [(inizio To fine)] [As nome-tipo][, variabile2 [(inizio To fine)] [As nome-tipo][,...]]

Opzionalmente, aggiungete la parola chiave Preserve per mantenere il contenuto della matrice che viene ridimensionata. ReDim può essere usato solo nelle subroutine.

### Parametri:

variable: nome di una variabile o di una matrice.

typename: parola chiave che dichiara il tipo di dati di una variabile.

Byte: variabile di tipo Byte (0-255)

Boolean: variabile di tipo booleano (Vero, Falso)

Currency: variabile per valuta (con quattro cifre decimali)

Date: variabile per data

Double: variabile a virgola mobile con doppia precisione (1.79769313486232 x 10E308 - 4.94065645841247 x 10E-324)

Integer: variabile numerica intera (compresa tra -32768 e 32767)

Long: variabile numerica intera lunga (compresa tra -2.147.483.648 e 2.147.483.647)

Object: variabile oggetto (nota: questa variabile può essere definita solo con Set!)

Single: variabile numerica decimale con precisione singola (compresa tra 3,402823 x 10E308 e 1,401298 x 10E-45).

String: variabile in formato stringa contenente un massimo di 2.147.483.647 caratteri.

Variant: tipo di variabile variante (contiene tutti i tipi ed è specificata dalla definizione). Se non è specificato il nome di un tipo, a meno che non venga utilizzata un'istruzione da DefBool a DefVar, alle variabili viene assegnato automaticamente il tipo Variant.

object: oggetto di tipo 'Universal Network Object' (UNO) o istanza di un oggetto ClassModule.

char: carattere speciale che dichiara il tipo di dati di una variabile.

In LibreOffice Basic non dovete dichiarare esplicitamente le variabili. Dovete invece dichiarare le matrici prima di poterle usare. Potete dichiarare una variabile con l'istruzione Dim, usando delle virgole (,) per separare dichiarazioni in serie. Per dichiarare il tipo di una variabile inserite un carattere di identificazione del tipo seguito dal nome della variabile oppure usate la parola chiave che indica il nome del tipo.

Declaration character | Variable type name
--- | ---
% | Integer
& | Long
! | Single
# | Double
$ | String
@ | Currency

array: dichiarazione matrice.

start, end: valori numerici o costanti che definiscono il numero di elementi (NumberElements=(end-start)+1) e l'intervallo dell'indice.

start e end possono essere espressioni numeriche, se ReDim è applicato a livello della procedura.

LibreOffice Basic supporta le matrici a una o più dimensioni definite da un tipo di variabile specifico. L'uso delle matrici è appropriato se il programma contiene elenchi o tabelle da modificare. Il vantaggio delle matrici è che consentono di fare riferimento a singoli elementi in base agli indici, che possono essere formulati come espressioni numeriche o come variabili.

Le matrici vengono dichiarate con l'istruzione Dim. Potete procedere in più modi per definire l'intervallo degli indici:

      Dim text(20) As String ' 21 elementi numerati da 0 a 20
      Dim value(5 to 25) As Integer ' 21 valori numerati da 5 a 25
      Dim ammontare(-15 to 5) As Currency ' 21 valori (compreso lo 0), numerati da -15 a 5
      REM Campo di dati bidimensionale
      Dim tabella$(20,2) ' 63 elementi; da 0 a 20 livello 1, da 0 a 20 livello 2 e da 0 a 20 livello 3.

Potete dichiarare una matrice di tipo dinamico se un'istruzione ReDim definisce il numero di dimensioni della subroutine o la funzione che contiene la matrice. In genere, potete definire le dimensioni della matrice una sola volta e non potete modificarle successivamente. All'interno di una subroutine, potete dichiarare una matrice con ReDim. Per definire le dimensioni potete usare solo espressioni numeriche. In questo modo si garantisce che i campi non superino la dimensione necessaria.

## Esempio:

    Sub ExampleRedim
        Dim iVar() As Integer, iCount As Byte
        ReDim iVar(5) As Integer
        For iCount = 1 To 5
            iVar(iCount) = iCount
        Next iCount
        ReDim iVar(10) As Integer
        For iCount = 1 To 10
            iVar(iCount) = iCount
        Next iCount
    End Sub