2013-05-30 8 views
8

Ho un problema con un oggetto Collection in Visual Basic, Aplications (usarla con Excel)Fare vuoto una collezione di VBA

Ho questo codice cercando di svuotare un oggetto Collection che devo ri-uso:

Sub limpieza(ByRef listilla As Collection) 

    While listilla.Count <> 0 
     listilla.Remove (listilla.Count) 
    Wend 

End Sub 

Ma quando io lo chiamo con:

Dim listado As New Collection 
<I have some code here that add some values to the collection> 
limpieza (listado) 

VBA mi dice che

argomento non è opzionale

e il codice non viene eseguito.

Cosa posso fare? Ho bisogno di usare questa pulizia della collezione nella parte inferiore di un ciclo che riutilizza l'oggetto Collection.

risposta

10
Dim listado As New Collection 
<I have some code here that add some values to the collection> 
limpieza listado 
'this syntax also works 
Call limpieza(listado) 

Si noti che ho rimosso il () intorno all'argomento.

Quando si passa byref si vuole fare questo come () provoca VBA di passare come byval di default a meno che non si aggiunge Call pure.

Questo può essere davvero frustrante poiché spesso è possibile utilizzare effettivamente lo standard subName(args) come sintassi, ma in questi tipi di problemi. Generalmente uso Call mySubName(args) per rendere le cose più chiare.

+0

Grazie hai risolto un sacco di problemi che ho avuto con sub-routine, documentazione MSDN non è una fonte molto utile di informazione. Sono un po 'noob con questo languaje – OlegarioFuentes

28

Se si vuole svuotare una raccolta, invece di chiamare un procedimento distinto, basta usare

Set listado = New Collection 
+2

Grazie, mi sono reso conto che ci sta anche facendo Set 'listado = Nothing' Posso fare lo stesso. Continuo a rispondere alla risposta di enderland perché mi ha risolto più problemi di procedura. Ci vediamo. – OlegarioFuentes

Problemi correlati