2015-03-12 11 views
6

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.

+0

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. –

risposta

8

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).

1

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 
+0

Questa non è una risposta alla domanda OP (forse ad un'altra domanda, ma non questa) –

+0

come si ottiene un voto negativo, ma la risposta selezionata è solo "NO" –

+1

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. –

1

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