2013-05-30 8 views
8

私はのaplications用のVisual BasicのCollectionオブジェクトに問題作る空のVBAコレクション

私はこのコードは、私は再利用する必要がCollectionオブジェクトを空にしようとしている(私はエクセルで使用)を持っています:

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としてVBAに渡します。

実際にsubName(args)を構文として使用することはよくありますが、この種の問題に遭遇することがあるので、これは本当にイライラすることがあります。私は一般的に物事をより明確にするためにCall mySubName(args)を使用します。

+0

おかげを使用し、MSDNのドキュメントは、非常に有用な供給源ではありません情報。私はこの言語で少し冗談だ – OlegarioFuentes

28

コレクションを空にしたい場合は、代わりに別のプロシージャを呼び出すのでは、ちょうどあなたが、私はサブルーチンとしていた多くの問題を解決し

Set listado = New Collection 
+2

ありがとう、私も同じことをすることができますセット 'listado = Nothing'をやっていることに気づいた。私は、それがより多くの手続きの問題を解決したので、エンダーランドの投票に答えています。またね。 – OlegarioFuentes

関連する問題