VBA循环遍历集合

Posted

技术标签:

【中文标题】VBA循环遍历集合【英文标题】:VBA Looping through a Collection 【发布时间】:2016-07-16 04:14:49 【问题描述】:

我有一个在 SelectManyFiles 函数中选择的文件集合,我想在集合函数中的每个绘图上运行多个私有子程序。这是我的代码:

Sub Main()

Dim Drawing As Object
Dim Drawings As Collection
Set Drawings = SelectManyFiles()

For Each Drawing In Drawings
    'Call multiple private subs to run on each drawing
Next Drawing
End Sub

我认为循环有问题,但不确定!任何帮助表示赞赏。

【问题讨论】:

所以你知道或不知道这是否有效?您是否有任何其他代码您尝试过并且知道不起作用? 这不起作用。它给了我 Object required 的错误。 “图纸”的类型是什么? “Collection”类是可枚举的? 它们是 AutoCAD .dwgs,是的 【参考方案1】:

SelectManyFiles 返回的集合未返回对象集合。它可能会返回一个字符串集合,但这只是一个猜测。将您的子更改为此

Sub Main()

Dim Drawing As Variant
Dim Drawings As Collection
Set Drawings = SelectManyFiles()

For Each Drawing In Drawings
    Debug.Print TypeName(Drawing)
Next Drawing
End Sub

看看 Debug.Print 给你什么。如果它是任何标量(字符串、长整数、双精度、布尔值等),那么您需要将 Drawing 声明为 Variant。只有所有集合项都是对象,才能使用Object。

【讨论】:

【参考方案2】:

试试

    FOR X = 1 TO DRAWING.COUNT
        'STUFF HAPPENS
    NEXT X

【讨论】:

虽然此代码可能会为问题提供解决方案,但最好添加有关其工作原理/方式的上下文。这可以帮助未来的用户学习并最终将这些知识应用到他们自己的代码中。解释代码时,您也可能会得到用户的积极反馈/赞成。

以上是关于VBA循环遍历集合的主要内容,如果未能解决你的问题,请参考以下文章

vba中五种循环语句的区别

增强for循环遍历集合或数组

Groovy集合遍历 ( 使用集合的 collect 循环遍历集合并根据指定闭包规则生成新集合 | 代码示例 )

for()与iterator()遍历循环的区别,各自的特点?

Java中Set集合怎样用for遍历?

集合遍历