Domanda.

nome=Gabriele
cognome=Alfieri
versione=MS Excel 2000
conosco3=buono
vba=SI
macro=SI
email=gabroa@libero.it
chr=211
problema=Gentile Ennius, Il mio problema è il seguente:
dovo cercare dei dati in un archivio tramite una TextBox in una UserForm e fin qui non ci sono problemi.
Vorrei però che i dati trovati finissero in una casella di riepilogo ma il problema è che sono 3 colonne e non voglio scrivere prima il foglio e poi ricopiare i dati nella ListBox, Gli Array che devo utilizzare devono essere dinamici ma non riesco a dichiararli (Io ho provato facendo Dim MyArray() ma non funziona; il sistema funziona se dichiaro un Array del tipo Dim MyArray(10,3) ma non va bene perchè deve essere dinamico.
Spero di averle illustrato bene il mio problema e la ringrazio per l'aiuto che mi ha fornito con il materiale presente sul suo sito, spero mi possa anche aiutare con il mio problema,
Saluti
Gabriele
 

Risposta.

ciao Gabriele, io quando ho degli elenchi variabili (dinamici) non uso array. Ti invio questa routine che funziona. Si basa, data una cella iniziale dove comincia l'elenco, sulla proprietà END per reperire l'ultima colonna occupata e l'ultima riga per ogni colonna occupata, e poi con un doppio ciclo for next faccio leggere i dati colonna per colonna e caricare la lista con additem. conoscendo invece il numero di colonne e di righe puoi evitare di usare end e fornire al ciclo i valori estremi su cui operare. questa è la routine, nell'esempio uso la cella A1 come cella iniziale:
Sub CaricaLista()
Set zonac = Range(Cells(1, 1), Cells(1, 1).End(xlToRight))
'con zonac prendo quante colonne a destra di A1 sono 'occupate a1 compresa
x = zonac.Columns.Count
'con x ottengo il numero delle colonne

ActiveSheet.ListBox1.Clear
'pulisco per prima la listbox (l'ho provata su un foglio, non su userform, ma è lo stesso)
For z = 1 To x
'inizializzo il ciclo per scorrere le colonne: dalla 1 al valore rappresentato da x
Set zonar = Range(Cells(1, z), Cells(1, z).End(xlDown))
'ora per ogni colonna, cerco da quante righe occupate è 'composto l'elenco
y = zonar.Rows.Count
'poi conto quante righe sono occupate e le memorizzo con y
For t = 1 To y
'indi inizio il secondo ciclo interno per scorrere le righe assegnando a t il numero di riga

w = Cells(t, z).Value
'quindi assegno a w il valore che sarà nella cella t, z
ActiveSheet.ListBox1.AddItem w
'carico la listbox con il valore rappresentato da w
Next
'continuo fine alla fine delle righe della prima colonna
Next
'passo alla colonna successiva ripetendo il ciclo sulle righe, fino alla fine delle colonne occupate
End Sub

Dovresti aver capito il concetto, ciao, fammi sapere, ennius