2013-05-30 3 views
8

내가 aplications에 대한 Visual Basic에서 컬렉션 개체에 문제가만들기 빈 VBA를 수집

이 코드는 내가 다시 사용할 필요가 컬렉션 객체를 비우려고 노력 있습니다 (I 엑셀와 함께 사용)가 :

Sub limpieza(ByRef listilla As Collection) 

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

End Sub 

하지만 그것을 호출 할 때 :

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

VBA는 나에게 말한다

인수는 선택 사항이 아닙니다.

코드가 실행되지 않습니다.

어떻게해야합니까? Collection 객체를 재사용하는 루프의 맨 아래에서이 콜렉션 클리닝을 사용해야한다.

답변

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) 

나는 인수를 중심으로 ()을 삭제했습니다.

byref을 전달할 때 ()으로 지정하면 Call을 추가하지 않으면 VBA에서 기본적으로 byval으로 전달됩니다.

종종 실제로는 subName(args)을 구문으로 사용할 수 있지만 이러한 종류의 문제가 발생할 수 있으므로 실제로는 실망 할 수 있습니다. 나는 일반적으로 Call mySubName(args)을 사용하여 더 명확하게합니다. 대신 별도의 절차를 호출하는 컬렉션을 비우려면

+0

감사를 사용 내가 서브 루틴 한 많은 문제가, MSDN 문서는 매우 유용한 소스되지 않습니다 해결 정보. 나는이 언어로 조금 멍청하다. – OlegarioFuentes

28

, 단지

Set listado = New Collection 
+2

고마워, 나는 또한 세트 'listado = Nothing' 같은 것을 할 수 있다는 것을 깨달았다. 나는 똑같이 만들 수있다. 나는 그것이 더 많은 절차 문제를 해결했기 때문에 엔더 랜즈에 대한 투표를 유지합니다. 나중에 보자. – OlegarioFuentes