【发布时间】:2015-11-14 05:11:47
【问题描述】:
我正在尝试设置一个 VBA 循环函数,该函数将遍历多个特定工作表,在每个工作表中执行一个嵌套循环。嵌套循环是一个 sumif 函数,我需要将其存储在 sumHACC 中,直到循环通过每个工作表,并将最终值(每个 sumif 的总和)输入到单个单元格中。
嵌套循环在不同的 if 条件下单独使用(请参阅底部的 'ALL OTHER FUNDERS),但我正在努力将其嵌套在循环中以在不同的工作表中迭代它 - 双循环是在'IF HACC IS SELECTED。需要循环通过的每张工作表的名称存储在单元格D6:D19 中,我将其拉入HACCRange,我正在尝试通过以下方式循环这些工作表:
For Each HACC In HACCRange
Set calcTab1 = Sheets(HACC)
这就是我收到类型不匹配错误的地方。本节中的代码不完整(即 sumHACC 没有更新),因为我完全不知道如何完成这项工作!
从技术上讲,在此之上还有另一个循环(sumif 条件向下移动列表(参考)),但这似乎不是问题。任何帮助将不胜感激!
Sub FunderLevel()
Dim reference As Range
Dim Funder As String
Dim itemRef1 As Range
Dim itemRef3 As Range
Dim calcTab1 As Worksheet
Dim calcTab3 As Worksheet
Dim sumCol As Range
Dim printCalc As Range
Dim HACCRange As Range
Dim QCCRange As Range
i = 21
Set reference = Range("A21:A22")
Funder = Range("A10")
'IF HACC IS SELECTED
If Funder = "HACC" Then
sumHACC = 0
Set HACCRange = Sheets("Reference Sheet").Range("D6:D19")
For Each HACC In HACCRange
Set calcTab1 = Sheets(HACC)
Set itemRef1 = calcTab1.Range("A10:A500")
myCol = calcTab1.Rows(7).Find(What:="All", LookIn:=xlValues, LookAt:=xlWhole, _
SearchOrder:=xlByColumns, SearchDirection:=xlNext, MatchCase:=False).Column
With calcTab1
Set sumCol = calcTab1.Range(.Cells(10, myCol), .Cells(500, myCol))
End With
For Each Cell In reference
Set printCalc = Cells(i, 2)
printCalc = WorksheetFunction.SumIf(itemRef1, Cell, sumCol)
i = i + 1
Next Cell
Next HACC
'ALL OTHER FUNDERS
Else:
Set calcTab3 = Sheets(Funder)
Set itemRef3 = calcTab3.Range("A10:A500")
myCol = calcTab3.Rows(7).Find(What:="All", LookIn:=xlValues, LookAt:=xlWhole, _
SearchOrder:=xlByColumns, SearchDirection:=xlNext, MatchCase:=False).Colum
With calcTab3
Set sumCol = calcTab3.Range(.Cells(10, myCol), .Cells(500, myCol))
End With
For Each Cell In reference
Set printCalc = Cells(i, 2)
printCalc = WorksheetFunction.SumIf(itemRef3, Cell, sumCol)
i = i + 1
Next Cell
End If
End Sub
【问题讨论】:
-
您的问题令人困惑,而且我怀疑它太长了。我建议您回到绘图板并手动布置(无代码)您的一般流程算法。您希望数据如何流动?事实证明,您是否需要首先执行整个循环以查找值,然后才能返回并使用这些值?您是否需要将变量存储在数组下而不是单个变量下?然后,如果这不起作用,请返回尽可能小的代码部分,同时仍会产生错误。
标签: vba excel loops nested-loops