VBA中的StringList

时间:2016-05-08 06:50:05

标签: vba

我在VBA中使用的函数返回变量ErrorTags,该变量必须定义为类型StringList。在Debug监视中,如果我看ErrorTags,我可以看到作为第1项,第2项等返回的字符串变量。但是我无法在代码中找到任何方法来访问这些变量。我已经尝试了

Test = ErrorTags.Item 1

Test = ErrorTags.Item_1

没有任何成功

正确的格式是什么?

1 个答案:

答案 0 :(得分:0)

假设ErrorTags确实是一个集合,你必须这样想:

ErrorTags是一个对象,它包含与其关联的所有值(您在监视列表中看到的 Items )。该对象具有默认属性Item。该属性可以返回存储在对象中的所有值,但一次只能返回一个。将返回的内容取决于您传递给属性的参数:

ErrorTags.Items(1)

这将返回存储在集合中的第一个项目。该参数用作索引,通过该索引可以处理集合中的所有项目。 VBA中的某些集合也接受字符串作为索引,但这取决于集合的类型。例如,在Excel中,工作簿的Sheets属性返回一个集合(包含Excel文件中的所有工作表)。该集合不仅将数字作为索引,还将工作表名称作为索引。

如上所述,集合的Item属性是默认属性。在VBA中,对象可以具有默认属性,这意味着可以省略它。因此,访问集合中的第一个项目也可以这样写:

ErrorTags(1)

现在,您可能希望有时不仅可以访问一个项目,而且还可以访问循环中的所有项目。您可以使用计数器作为集合的索引,使用For循环执行此操作 但有更好的方法:

Dim et As Variant

For Each et In ErrorTags
    ' now you have one item stored in et, do with it as you like
Next et

使用For Each循环,您可以迭代集合的所有项目(它也适用于数组)。对于每次传递,当前项目将写入变量et。只要您处于循环中,就使用该变量而不是ErrorTags.Items()。假设ErrorTags集合中的项是简单字符串,如果将Debug.Print et放在循环体中,则可以将所有项输出到即时窗口。

如果集合中的项目本身就是对象,那么您应该将变量et的声明更改为该对象类型:

Dim et As ErrorTag ' assuming that is the object type

有关For Each循环的详细信息,请访问the documentation