我有一个相当大的过滤表,派生自包含数千个条目的表。这使用计算值进行故障诊断和评估系统可用性。
我正在尝试过滤数据透视表值,以仅显示最重要的错误。我试图过滤的字段包含浮点值,目的是只显示数字高于给定值的条目(假设> 0.01)。
代码是:
Sub FilterPivotTable(pvtName As String, pvtField As String, rngMin As String)
' pvtName = name of pivot table
' pvtField = pivot table field to filter
' rngMin = range name containing the minimum value to filter on
Dim pvtItem As PivotItem
Dim vMin As Double
Dim x As Double
vMin = Range(rngMin).Value
With ActiveSheet.PivotTables(pvtName).PivotFields(pvtField)
.ShowAllItems = True
For Each pvtItem In .PivotItems
x = CDbl(pvtItem.Name)
pvtItem.Visible = (x >= vMin)
Next
End With
' Change the cache setting
ActiveSheet.PivotTables(pvtName).PivotCache.MissingItemsLimit = xlMissingItemsNone
ActiveSheet.PivotTables(pvtName).PivotCache.Refresh
End Sub
例程正确运行,隐藏值小于限制值...除非筛选器列表具有重复值!在这种情况下,第一个值是未选中的,但其他值仍保持勾选状态。
当我单步执行宏时,我可以看到名称字符串值,并且x的值在局部变量中正确显示,但Excel似乎不知道它实际上正在查看哪个pvtItem。重复项在行pvtItem.Visible =(x> = vMin)中操作之前已经具有状态Visible = False,并且Excel似乎只是使列表中具有该名称的第一个值不可见而不是正在检查的实际项
我的问题可能是列表中有多个具有相同名称的项目。我可以消除重复的名称吗?
我没有发布图片的“声望”,但下拉过滤器列表包含如下示例条目:
[ ] 0.0000125385802469136
[ ] 5.78703703703704E-06
[x] 5.78703703703704E-06
[ ] 0.0000326554232804233
[ ] 6.61375661375661E-06
[x] 6.61375661375661E-06
[x] 0.0000132275132275132
[ ] 1.65343915343915E-06
[x] 1.65343915343915E-06
etc.
e.g。 pvtItem.Name(字符串)对于第2和第3项,第5和第6项,第8和第9项等是相同的。我检查了源表中的原始数据,实际值也与显示的最大值相同30数字包括小数点。
感谢您的帮助。