2015-04-09 6 views
5

Con questo codice (in excel-vba) aggiungo a una raccolta un numero di elementi in base a una matrice.
Uso il valore dell'array come chiave e la stringa "NULL" come valore per ogni elemento aggiunto.Come modificare il valore di un articolo di una collezione

Dim Coll As New collection 
Dim myArr() 

Set Coll = New collection 
myArr() = Array("String1", "String2", "String3") 

For i = LBound(myArr) To UBound(myArr) 
    Coll.Add "NULL", myArr(i) 
Next i 

Ora, se voglio cambiare il valore di un elemento, lo identifica con il tasto, devo rimuovere l'elemento e quindi aggiungere un elemento con stessa chiave o è possibile modificare il valore articolo?

Questo sotto è l'unico modo?

Coll.Remove "String1" 
Coll.Add "myString", "String1" 

O c'è qualcosa di simile: (lo so che non funziona)

Coll("String1") = "myString" 
+3

Hai provato a utilizzare un 'dizionario' (dalla libreria di scripting)? –

+0

AFAIK e come [MSDN] (https://msdn.microsoft.com/en-us/library/vstudio/f26wd2e5 (v = vs.100) .aspx) dicono che questo è l'unico modo. La tazza è corretta, usa invece un dizionario. Se decidi di seguire questa strada, [guarda questo.] (Http://www.snb-vba.eu/VBA_Dictionary_en.html) – L42

+0

Non puoi farlo con la raccolta. –

risposta

4

È inoltre possibile scrivere una funzione (pubblico) per rendere gli aggiornamenti di una collezione.

public function updateCollectionWithStringValue(coll ax Collection, key as string, value as string) as collection 
coll.remove key 
coll.add value, key 
set updateCollectionWithStringValue = coll 
end function 

È possibile richiamare questa funzione:

set coll = updateCollectionWithStringValue(coll, "String1","myString") 

Allora avete un uno di linea per invocare.