2016-04-19 24 views
0

私は単純なVBA辞書を持っています。 Keyは文字列で、Itemはカスタムクラス(単純なプロパティといくつかの関数を含む)です。辞書インスタンスをクラスインスタンスとして格納 - オブジェクトはこのプロパティまたはメソッドをサポートしていません

辞書内の各クラスインスタンス(cNewClass)の関数の1つを呼び出そうとしています。私はここに苦労しています:ラインで

Dim i As Integer 
Dim nt As New cNewClass 
a = dict.Items 
For i = 0 To dict.Count - 1 
    nt = a(i) 
Next i 

:「オブジェクトはこのプロパティまたはメソッドをサポートしていません」:

nt = a(i) 

を私はエラーを取得します。

[編集:これは、動作しませんでしたしようとしました]私が代わりに?:

For i = 0 To dict.Count - 1 
    a(i).RunMethod(Args) 
Next i 

おかげのような何かができる - KC

答えて

1

As you noticedの場合は、Setキーワードを使用してオブジェクト参照を割り当てる必要があります。

Dim i As Integer 
Dim nt As New cNewClass 
a = dict.Items 
For i = 0 To dict.Count - 1 
    Set nt = a(i) 
Next i 

は、しかし、私はここで厄介なの落とし穴について警告する必要があります:As New cNewClassntの動作を変更され、これがまたは干渉しない場合がありますが、それでも私はそれについて警告を表示するを持っている

Sub Test() 
    Dim c As New Collection 
    c.Add "Foo" 
    Set c = Nothing 
    c.Add "Bar" 'you'd think this would blow up because 'c' is Nothing, right? Think again! 
End Sub 

ローカルオブジェクト変数がAs Newと宣言された場合、VBAは何があっても参照を維持します。は望ましくないまたは予期しない動作を導入します。

あなたはあなたがntを宣言している参照を使用していない - ただそこNewキーワードを手放す:

Dim i As Integer 
Dim nt As cNewClass 
a = dict.Items 
For i = 0 To dict.Count - 1 
    Set nt = a(i) 
Next i 
+0

グレート、警告のためのおかげでたくさん!新しいものはなくなった。 – keynesiancross

0

回答 - "SET" を使用

Dim i As Integer 
Dim nt As New cNewClass 
a = dict.Items 
For i = 0 To dict.Count - 1 
    Set nt = a(i) 
Next i 
関連する問題