3

コードはここにあり、実行時エラー '424' Object required が for each ステートメントの最初の行に表示されます

Public Sub test()

Dim a As clsTest
Dim dic As Dictionary
Dim tmpObj As clsTest
Set dic = New Dictionary
Set a = New clsTest
dic.Add "1", a
dic.Add "2", New clsTest
dic.Add "3", New clsTest

For Each tmpObj In dic.Items '--<< error: Run-time error '424' Object required
  Debug.Print tmpObj.i
Next tmpObj

Stop
End Sub
4

3 に答える 3

2

2 つの選択肢があります。変数をバリアントとして宣言します。

Dim tmpObj As Variant

For Each tmpObj In dic.Items

  Debug.Print tmpObj.i

Next tmpObj

または、コレクションを反復処理します。

Dim tmpObj As clsTest

For i = 0 To dic.Count - 1

    Set tmpObj = dic.Items(i)

    Debug.Print tmpObj.i

Next i
于 2012-12-18T12:15:06.287 に答える
2

3 つのオプション

1)

Dim tmpObj As Variant

For Each tmpObj In dic.Items

  Debug.Print tmpObj.i

Next tmpObj

2)

for i = 0 to dic.Count - 1
    set tmpObj = dic.Items(i)
   ...

3)

Public Sub test()

Dim a As clsTest
Dim dic As Dictionary
Dim vTmpObj As Variant
Dim tmpObj As clsTest
Set dic = New Dictionary
Set a = New clsTest
dic.Add "1", a
dic.Add "2", New clsTest
dic.Add "3", New clsTest

For Each vTmpObj In dic.Items
  Set tmpObj = vTmpObj
  Debug.Print tmpObj.i
Next vTmpObj
于 2012-12-18T13:45:37.497 に答える
1

ADictionary.Items()はバリアント配列であるため、としてFor Each持つ必要があります。tmpObjVariant

型付きを使用する代替手段tmpObjは次のとおりです。

for i = 0 to dic.Count - 1
    set tmpObj = dic.Items(i)
    ...
于 2012-12-18T12:15:16.947 に答える