Come altri hanno affermato, non esiste un modo diretto per scorrere le proprietà di un oggetto. Ho un foglio di calcolo che memorizza molti valori che ho bisogno di leggere in fase di esecuzione, simile al tuo. Il metodo migliore che ho trovato per farlo è utilizzando il metodo CallByName
che consente di impostare o ottenere una proprietà tramite il nome .
Ora, alcuni potrebbero dire che la configurazione iniziale è eccessiva, ma spesso aggiungo e rimuovo queste proprietà, quindi fare lo stesso con il codice è ancora più problematico. Quindi la bellezza di questo metodo è che puoi modificare frequentemente il tuo numero di proprietà senza dover cambiare questo codice. È possibile utilizzare le funzioni impressionanti che fanno uso di CallByName
da qui: https://stackoverflow.com/a/5707956/1733206
Poi per il tuo esempio, vorrei fare quanto segue nella mia collezione poss
(notare che questo non fa alcun controllo degli errori, ecc, che come si può do):
Public Sub ReadInData()
Dim vInputs As Variant, ii As Integer, jj As Integer, cp As pos
Dim sPropertyName As String, vPropertyValue As Variant
'Raead in the data. I've set it from the activesheet, you can do it how you like
With ActiveSheet
vInputs = .Range(.Cells(1, 1), .Cells(.UsedRange.Rows.Count, .UsedRange.Columns.Count)).Value2
End With
'Look through the rows of data, one row per 'pos' object
For ii = LBound(vInputs, 1) + 1 To UBound(vInputs, 1)
'Set up your object
Set cp = New pos
'Loop through the columns of data eg Clutch, wiper, etc
For jj = LBound(vInputs, 2) To UBound(vInputs, 2)
'Put in seperate variables so its easy to see what's happening
sPropertyName = vInputs(1, jj)
vPropertyValue = vInputs(ii, jj)
'Use the callable method to set the property (from here: https://stackoverflow.com/a/5707956/1733206)
Call SetProperty(sPropertyName, vPropertyValue, cp)
Next jj
Me.Add cp
Set cp = Nothing
Next ii
End Sub
Ecco un esempio in una cartella di lavoro: https://dl.dropboxusercontent.com/u/13173101/VBAObject.xlsm
Edit: Dal momento che si stia cambiando l'oggetto spesso, ho incluso un altro modulo che è molto utile e sarà in realtà scrivere la classe pos
per te in base alle intestazioni delle colonne nel tuo foglio di lavoro. Ciò significa che se aggiungi un'altra colonna, queste verranno aggiunte all'oggetto! Presuppone che tutte le proprietà siano stringhe ma è possibile modificarle.
Poiché gli indici partono da 1, può essere più ordinato di usare un sottoinsieme al posto di una classe in modo da poter loop su colonna indici con 'pos.add sh2.Cells (R, i)'. Quindi utilizzare l'indice Colonna per accedere al valore es. 'Pos (Clutch)'. –