用vba中的用户定义的类对象的每个循环

代码在这里,你得到每个语句的第一行所需的运行时错误'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 

三个选项

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 

你有两个select: 声明variables作为变体:

 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 

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

另一种使用types化的tmpObj是:

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