我正在尝试使用 WorksheetFunction.Sum 对结果中所有行的相同字段求和,但是,它似乎没有这样做。它不会抛出错误,它只是不总结任何东西。我知道有些行应该抛出超过 1 行的结果。
这就是我想要做的:
For Each Code In BomCodes
With InventorySheet
.AutoFilterMode = False
.Range("B1").AutoFilter Field:=2, Criteria1:="Project"
.Range("D1").AutoFilter Field:=4, Criteria1:="ContractNumber"
.Range("N1").AutoFilter Field:=14, Criteria1:="Code"
.Range("Q1").AutoFilter Field:=17, Criteria1:=">0"
End With
'Do a search through the filtered inventory
Set rangeFilteredInventory = InventorySheet.Range("Q2:Q" & Cells(Rows.Count, "Q").End(xlUp).Row)
'Get the sum of all results
With InventorySheet
TotalQty = WorksheetFunction.Sum(rangeFilteredInventory.SpecialCells(xlCellTypeVisible))
If TotalQty <> 0 Then
Debug.Print TotalQty, vbNewLine, vbNewLine
End If
End With
Next Code
我试过不使用 With InventorySheet,而是使用整个
Applicaiton.WorksheetFunction.Sum
,
Set rangeFilteredInventory = InventorySheet.Range("Q2:Q" & Cells(Rows.Count, "Q").End(xlUp).Row)
遍历所有但如果我评论 If 结构,它总是显示 0。
改变为
Set rangeFilteredInventory = InventorySheet.Range("Q2:Q" & Rows.Count).End(xlUp).Row
它甚至不访问第一条记录
并且
Set rangeFilteredInventory = InventorySheet.Range("Q" & Rows.Count).End(xlUp).Row
它也不访问第一条记录。
所以,我的想法是我把范围弄错了。它应该总结该表中的所有“Q”。
如果我在那张纸上做一个宏
With Worksheets("sbom")
.AutoFilterMode = False
.Range("B1").AutoFilter Field:=2, Criteria1:="5522970"
.Range("D1").AutoFilter Field:=4, Criteria1:="0008621302140U"
.Range("N1").AutoFilter Field:=14, Criteria1:="LVE70001372"
.Range("Q1").AutoFilter Field:=17, Criteria1:=">0"
End With
它返回多条记录。
很抱歉,如果我以错误的方式在那里有新的东西,我是 VBA 的新手,我正在自学。
编辑:
我将 SUM 切换为 Subtotal,虽然它执行循环,但 TotalQty 仍然为 0。我使用 BK201 给我的部分答案来改进一些事情。
For Each Code In BomCodes
Debug.Print "Grabbed Code:", Code, vbNewLine
With InventorySheet
.AutoFilterMode = False
LRowOnQ = .Columns("Q").End(xlUp).Row
.Range("B1").AutoFilter Field:=2, Criteria1:="Project"
.Range("D1").AutoFilter Field:=4, Criteria1:="ContractNumber"
.Range("N1").AutoFilter Field:=14, Criteria1:="Code"
.Range("Q1").AutoFilter Field:=17, Criteria1:=">0"
Set rangeFilteredInventory = .Range("Q2:Q" & LRowOnQ)
End With
'Do a search through the filtered inventory
'Get the sum of all results
' With InventorySheet
TotalQty = WorksheetFunction.Subtotal(9, rangeFilteredInventory.SpecialCells(xlCellTypeVisible))
If TotalQty <> 0 Then
Debug.Print TotalQty, vbNewLine, vbNewLine
End If
Next Code