View Full Version : [vba] aggiungere elementi ad array dentro ciclo
john_revelator
18-11-2007, 21:00
Ciao a tutti. Scusate la domanda sicuramente banale ma mi sto avvicinando alla programmazione in vba. Ciò che vorrei fare è, all'interno di un semplice ciclo da 0 a 9, accodare il valore del contatore i al contenuto dell'array in modo tale da ottenere il mio array con tutti i valori da 0 a 9. Ovviamente sbaglio qualcosa. Mi date una mano? Grazie. :)
Private Sub Comando0_Click()
Dim elementi As Variant
For i = 0 To 9
elementi() = i
Next i
Debug.Print elementi(1)
End Sub
E' perche non definisci il vettore...e poi non usi gli indici.
Non conosco molto il vb ma dovrebbe essere:
Private Sub Comando0_Click()
Dim elementi(10) As Integer //tra parentesi la grandezza del vettore
For i = 0 To 9
elementi(i) = i //elementi(posizione) = valore di i
Next i
Debug.Print elementi(1) //stampi la posizione 1 del vettore, per stamparlo tutto //credo tu debba fare un ciclo for per la stampa.
End Sub
Prova ;)
john_revelator
18-11-2007, 21:39
Ti ringrazio, funziona. :)
Avevo provato anche a scrivere
elementi(i) = i
ma non dichiaravo la dimensione dell'array.
A questo punto però mi sorge un dubbio: questo era un esempio banale ma se io devo aggiungere degli elementi se una certa condizione si verifica o meno, non posso sapere a priori quale sarà la dimensione. Quindi come si fa in questi casi?
wingman87
18-11-2007, 22:26
Devi ridimensionare l'array esistente. Non so quale sia la funzione per far questo, vedi nella documentazione se esiste "Redim".
john_revelator
18-11-2007, 22:59
Devi ridimensionare l'array esistente. Non so quale sia la funzione per far questo, vedi nella documentazione se esiste "Redim".
Grazie. La funzione redim in effetti esiste e a quanto ho capito serve proprio per redimensionare in maniera dinamica l'array.
Ho provato a fare una semplice funzioncina per capirne il funzionamento ma non va
Private Sub Comando0_Click()
Dim valori As Variant
Dim minori As Variant
valori = Array(5, 10, 11, 13, 6, 9, 12, 18)
X = 0
For i = LBound(valori) To UBound(valori)
If (valori(i) < 10) Then
ReDim Preserve minori(UBound(minori) + 1)
minori(X) = valori(i)
X = X + 1
End If
Next i
MsgBox (minori(0))
End Sub
In pratica dal mio array di partenza vorrei creare un nuovo array che contenga solo i valori inferiori a 10.
Ottengo un errore proprio in corrispondenza della riga redim (per l'esattezza errore di run-time 13. Tipo non corrispondente.
Potete darmi un ultimo aiutino? Grazie. :)
john_revelator
18-11-2007, 23:33
Pare che così funzioni. Comunque se avete consigli da darmi, visto che sono agli inizi, son sempre ben accetti. :)
Private Sub Comando0_Click()
Dim valori As Variant
Dim minori() As Variant
valori = Array(5, 10, 11, 13, 6, 9, 12, 18)
'X = 0
For i = LBound(valori) To UBound(valori)
If (valori(i) < 10) Then
ReDim Preserve minori(X)
minori(X) = valori(i)
X = X + 1
End If
Next i
For i = LBound(minori) To UBound(minori)
MsgBox (minori(i))
Next i
End Sub
vBulletin® v3.6.4, Copyright ©2000-2026, Jelsoft Enterprises Ltd.