3

代码在这里,你会在每个语句的第一行得到一个运行时错误“424”对象

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

三个选项

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 回答
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 回答
1

ADictionary.Items()是一个变体数组,因此For Each需要tmpObj作为Variant.

使用类型的替代方法tmpObj是:

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