C'è un modo per partecipare a una raccolta in VBA? Posso trovare join (array, ";"), ma questa funzione non può essere applicata a una raccolta.Come partecipare a una raccolta in VBA
Grazie.
C'è un modo per partecipare a una raccolta in VBA? Posso trovare join (array, ";"), ma questa funzione non può essere applicata a una raccolta.Come partecipare a una raccolta in VBA
Grazie.
Sfortunatamente no, non c'è niente di integrato.
Dovrete sia
convertire la collezione ad un array (non incorporato per che o, dovrete per loop through all the items) e quindi usare Join(array, ";")
o
join la tua raccolta "nel modo più duro" (imposta la bandiera first
, passa attraverso gli elementi, aggiungi ";" se non è first
, deseleziona first
, aggiungi elemento).
Ho bisogno di chiarire che quanto segue NON è la risposta alla domanda di cui sopra. Tuttavia, per tutti coloro che sono arrivati qui a chiedermi come unire le collezioni (mi è successo), il codice qui sotto sarà aggiungere il contenuto di una raccolta (col2) ad un altro (col1):
Sub addColToCol(col1 As Collection, col2 As Collection)
Dim i As Integer
For i = 1 To col2.Count
col1.Add col2.Item(i)
Next i
End Sub
Se si desidera conservare il contenuto di ogni raccolta, dichiara una raccolta supplementare.
Dim super_col As New Collection
addColToCol super_col, col1
addColToCol super_col, col2
Questa non è una risposta alla domanda OP (forse ad un'altra domanda, ma non questa) –
come si ottiene un voto negativo, ma la risposta selezionata è solo "NO" –
Grazie, non l'avevo notato. In realtà stavo cercando come unire le collezioni e questo è stato il primo risultato di ricerca che ho ottenuto, quindi ho pensato di aggiungere la risposta a chiunque si sia imbattuto casualmente in questo post in cerca di aiuto. –
Questo è il modo per farne parte:
Join(CollectionToArray(colData), ",")
E la funzione:
Public Function CollectionToArray(myCol As Collection) As Variant
Dim result As Variant
Dim cnt As Long
ReDim result(myCol.Count - 1)
For cnt = 0 To myCol.Count - 1
result(cnt) = myCol(cnt + 1)
Next cnt
CollectionToArray = result
End Function
Date un'occhiata a [ciò che questo ragazzo ha fatto] (https://github.com/ ptwales/VBEX) - il metodo ['List.ToString'] (https://github.com/ptwales/VBEX/blob/master/src/List.cls#L452-L461) farebbe ciò che vuoi fare qui. –