VBA:Dim可将集合设置为

VBA:Dim可将集合设置为,vba,collections,Vba,Collections,我试图使用一个文件名集合来循环遍历该集合中的每个项 我不知道如何将集合分配给Dim,以便轻松调用该集合中的项目 我得到的是: Sub VlookupMGCCode(ByRef reports, ByRef item1, ByRef item2, ByRef item3, ByRef item4) Dim lastrow As Integer Dim wRange As Range Dim blankRange As Range Dim temp As Object lastrow = Cel

我试图使用一个文件名集合来循环遍历该集合中的每个项

我不知道如何将集合分配给
Dim
,以便轻松调用该集合中的项目

我得到的是:

Sub VlookupMGCCode(ByRef reports, ByRef item1, ByRef item2, ByRef item3, ByRef item4)

Dim lastrow As Integer
Dim wRange As Range
Dim blankRange As Range
Dim temp As Object

lastrow = Cells(Rows.count, "A").End(xlUp).Row
Set wRange = Range("$T$7:$T$" & lastrow)

temp = CollectReports(item1, item2, item3, item4)

For x = 1 To 3
    Set blankRange = wRange.SpecialCells(xlCellTypeBlanks)
    blankRange.FindNext("").FormulaR1C1 = "=VLOOKUP(RC[-18],'[" & temp.Item(x) & "]Sheet1'!C1:C31,31,FALSE)"

    With blankRange
        .FillDown
        .Copy
        .PasteSpecial Paste:=xlPasteValues, SkipBlanks:=False
    End With
Next

End Sub


为了避免混淆,我只从
x=1运行到3
,因为集合中只有前三项适用于当前正在运行的报表。最后一种适用于不同的类似报告,该报告也将用于收集


如您所见,我试图将
集合
分类为
对象
,因此得到
对象变量或未设置块变量的
运行时错误

你能告诉我怎么做吗


谢谢大家!

我想你可能做得对。问题在于分配
temp
时没有使用
set


设置温度=收集报告(项目1、项目2、项目3、项目4)


您还可以将
temp
定义为
集合
,但是
Object
应该没问题。

当我将
temp
设置为
Collection
时,它好像需要一个参数作为集合中某个项目的索引。@Tawm你能详细说明一下你说的
像需要一个参数一样是什么意思吗?我已经对此进行了相当彻底的测试,我觉得NYCdotNet的答案是正确的。
Function CollectReports(ByRef item1, ByRef item2, ByRef item3, ByRef item4) As Collection

Dim reports As New Collection

reports.Add Item:=item1, Key:="1"
reports.Add Item:=item2, Key:="2"
reports.Add Item:=item3, Key:="3"
reports.Add Item:=item4, Key:="4"

Set CollectReports = reports

End Function