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