VBA 循环遍历集合

19

我有一个文件集合,是在SelectManyFiles函数中选择的,我想在该集合函数中对每个Drawing运行多个私有子程序。以下是我的代码:

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

我认为循环出了一些问题,但不确定具体是什么!感激任何帮助。


那么你知道这是否有效吗?你有没有尝试过其他代码并且知道它们无效? - Cᴏʀʏ
这个不起作用。它给了我“需要对象”错误。 - GhostTiger
"Drawings"的类型是什么?"Collection"类是可枚举的吗? - Augusto Goncalves
它们是AutoCAD .dwg文件,是的。 - GhostTiger
2个回答

22

由 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

2
虽然这段代码可能提供了问题的解决方案,但最好添加上为什么/如何运作的上下文。这可以帮助未来的用户学习并最终将该知识应用到他们自己的代码中。当代码被解释时,您还可能会得到用户的积极反馈/赞同。 - Amit Verma

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接