我正在处理一个VBA表单,它可以操作和从数据透视表中提取。
我可以看一下,通过我的代码应用过滤器,并相应地查看数据透视表更新。
然后我将DataBodyRange从1循环到DataBodyRange.Count,并在每行中“执行”。
直到我通过一些手表和断点发现,当DataBodyRange有一个项目(加上“标题”)计数为1
时,它工作得很好但是,如果DataBodyRange有0项(换句话说只有“标题”行),则计数STILL返回1
我可以证明这种行为。采取下表及其相应的数据透视表:
报告布局是表格
使用以下测试子
Public Sub Test()
Dim PT As PivotTable
Dim PF As PivotField
Dim F As PivotFilter
Set PT = ThisWorkbook.Worksheets("Sheet1").PivotTables("PivotTable1")
Set PF = PT.PivotFields("Name")
Set F = PF.PivotFilters(1)
MsgBox "Filter: """ & F.Value1 & _
""" As Filter Type " & F.FilterType & _
" on PivotField """ & PF.Name & _
""" DataBodyRange.Count = " & PT.DataBodyRange.Count
End Sub
应用第一个过滤器进行控制测试
相应的数据透视表更改
运行测试():
按预期返回1
现在控制已经建立
让我们应用一个与任何东西不匹配的过滤器
和数据透视表更改
最后运行Test()
我在工作中实际使用的VBA代码是Excel 2010.这些屏幕截图来自Excel 2013,因此这种“行为”似乎在不同版本中非常一致。
我错过了什么?