Newsgroup: it.comp.appl.access
Titolo: Ancora sull'inizializzazione dell'array

Ho dichiarato il contatore Variant come l'array, come mi era stato
suggerito. Però se faccio:
Dim arr As Variant
Dim i As Variant
For i = 0 To 7
       arr(i) = Null
       Next
mi continua a dire "tipo non corrispondente". Forse dimentico qualcosa
o forse c'è un altro modo per inizializzare un array ma più semplice
di come ho scritto non so :)

 ha scritto nel messaggio 
news:1178094117....@y5g2000hsa.googlegroups.com...


Certamente, non hai definito la grandezza dell'array o comunque non lo hai 
ridimensionato:
Dim arr()
Dim i As Integer
ReDim arr(8)
For i = 0 To 7
       arr(i) = Null
Next
Così funziona.
Ciao, Carlo

 ha scritto nel messaggio
news:1178094117....@y5g2000hsa.googlegroups.com...


Ma cosa devi fare...?
Esiste la ERASE per distruggere l'array oppure se ti hanno suggerito il
Variant
di certo non era per usarlo in quel modo.
Normalmente si usano 2 Variant per ciclare l'array ma non per azzerarne gli
Item
ES:
    Dim arr As Variant
    Dim x   As Variant
    arr = Split("AA;BB;CC", ";")
    For Each x In arr
        Debug.Print x
    Next
Nel tuo caso però non è corretto e non funzionerebbe, nel senso che l'array
non verrebbe toccato.
Io farei così senza necessità di ciclarlo essendo un Variant e non una
Matrice:
Arr=null
-- 
@Alex (Alessandro Baraldi)
---------------------------------------------------------------------------
http://www.sitocomune.com/
http://www.alessandrobaraldi.it
---------------------------------------------------------------------------

Pino ha scritto:

Forse sono stato io a dirti di usare valori variant per gli array, ma
visto il codice è bene chiarire un paio di cose.
Le matrici NON vanno dimensionate come Variant ma vanno invece
dimensionate specificando il numero di elementi che devono contenere:
Dim arr(7)
Per farla bene dovresti dichiarare il tipo di dati che ogni elemento
dovrà contenere:
Dim arr(7) as integer
Oppure se non sai il tipo o può essere uno qualunque:
Dim arr(7) as variant
Quindi nel tuo esempio, la variabile i deve essere un Integer (o Byte,
se ti occorrono meno di 255 elementi).
Il codice funzionante è:
Dim i As integer
dim arr(7)
For i = 0 To 7
        arr(i) = Null
Next i
Invece se parti da una lista di valori che non vuoi "contare"
inizialmente, devi dichiarare una Variant e "trasformarla" in matrice
tramite la funzione Array().
Se non vuoi usare un indice per ciclare la matrice, devi dichiarare
un'altra variabile come Variant (in questo caso, è 'elemento'). La
sintassi è questa:
dim arr as variant
dim elemento as variant
arr = array(0,1,2,3,4,5,6,7)
for each elemento in arr
    elemento = null
next elemento
Tramite la funzione array() la variant 'arr' viene "trasformata" in
matrice contente 8 elementi.
In questo caso sia 'arr' che 'elemento' devono essere dimensionati
come variant, ed era il suggerimento che ti avevo dato.
Poi, dal momento che arr diventa una matrice, allora puoi fare anche:
dim arr as variant
dim i as integer
arr = array(0,1,2,3,4,5,6,7)
for i = 0 to 7
  arr(i) = null
next i
oppure, se non conosci l'indice del primo e dell'ultimo elemento nella
matrice arr:
dim arr as variant
dim i as integer
arr = array(0,1,2,3,4,5,6,7)
for i = Lbound(arr) to Ubound(arr)
  arr(i) = null
next i
Oppure usi For Each con una Variant per ciclare tutti gli elementi
indistintamente.
Ciò detto, per "svuotare" una matrice esiste l'istruzione Erase che
reinizializza una matrice.
Però se ti occorre proprio il valore Null negli elementi, devi
necessariamente impostarlo tramite un ciclo.
Erase inizializza valori differenti a seconda di come dichiari la
matrice ("" se dichiari gli elementi String, 0 se li dichiari Integer,
etc), e non inizializza alcun tipo a Null (Mi riferisco solo alla
versione 97 di Office, per le altre non so).
ciao,
Panathos

 Panathos
Saluti
@Alex

 Errore.
Gli era stata suggerita l'istruzione Erase come alternativa al ciclo,
e volevo sottolineare il fatto che se gli occorre avere dei null come
valori, Erase non va bene.
ciao,
Panathos

 Panathos
@Alex

 sempre fare riferimento alle proprietà ESPLICITE degli oggetti.
Be', l'op ha fatto una domanda su un ciclo; i controlli li ho nominati
io, ipotizzando un eventuale uso per il quale potrebbe avere senso una
matrice di valori null.
Che intendi per "proprietà esplicite" degli oggetti? E perché
bisognerebbe farvi riferimento, ipotizzando di usare una matrice per
valorizzarne alcuni?
Grazie e ciao,
Panathos

 sempre fare riferimento alle proprietà ESPLICITE degli oggetti.
Be', l'op ha fatto una domanda su un ciclo; i controlli li ho nominati
io, ipotizzando un eventuale uso per il quale potrebbe avere senso una
matrice di valori null.
Che intendi per "proprietà esplicite" degli oggetti? E perché
bisognerebbe farvi riferimento, ipotizzando di usare una matrice per
valorizzarne alcuni?
[Risposta]
Gli oggetti hanno le proprietà e metodi...
Value è la proprietà di Default di molti oggetti e spesso si omette il suo
riferimento:
strTesto=Me!NomeTextBox
strTesto=Me!nomeTextBox.Value
Accedere alla proprietà in modo esplicito rende più chiaro il codice e meno
difficile sbagliare.
Grazie e ciao,
[Risposta]
Ciao
Panathos


 difficile sbagliare.
Anche questo è vero, e sapevo della proprietà value ma per pigrizia
non la uso mai.
Cattiva abitudine da togliere al più presto.
P.S.: te sarai alla CISA il 7/8 giugno?
ciao,
Panathos

 Panathos
@Alex

 di assicurare la presenza, pertanto ho preferito non aderire.
Peccato, cmq grazie per i consigli :-)
ciao,
Panathos