Class 对于vba中具有用户定义类对象的每个循环

Class 对于vba中具有用户定义类对象的每个循环,class,excel,vba,Class,Excel,Vba,代码在这里,在for-each语句的第一行上需要一个运行时错误“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 d

代码在这里,在for-each语句的第一行上需要一个运行时错误“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
公共子测试()
将a变暗为clsTest
词典
将tmpObj变为clsTest
Set dic=新字典
设置a=新的clsTest
dic.添加“1”,a
dic.添加“2”,新条款
dic.加上“3”,新条款

对于dic.Items'-中的每个tmpObj,您有两个选择:。将变量声明为变量:

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()
是一个变量数组,因此每个
都需要
tmpObj
作为
变量

使用键入的
tmpObj
的替代方法是:

for i = 0 to dic.Count - 1
    set tmpObj = dic.Items(i)
    ...
三种选择

(一)

(二)

(三)


是的,我一直在使用variant选项,但它失去了intellisense,所以我必须在开发时不断地将类型从variant更改为clsTest,在运行时再更改。更新了我的代码。tmpObj可以通过这种方式强类型化到您的自定义类中,并且您对值具有intellisense。若它返回一个对象数组,那个么它会更有用。是的,我一直在使用变体。我只是想问问。
Dim tmpObj As Variant

For Each tmpObj In dic.Items

  Debug.Print tmpObj.i

Next tmpObj
for i = 0 to dic.Count - 1
    set tmpObj = dic.Items(i)
   ...
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