2

我有一个相当大的过滤器表,它来自包含数千个条目的表。这使用计算值进行故障诊断和评估系统可用性。

我正在尝试过滤数据透视表值以仅显示最重要的故障。我试图过滤的字段包含浮点值,其目的是只显示数字高于给定值的条目(假设 > 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.

例如,pvtItem.Name(字符串)对于第 2 项和第 3 项、第 5 项和第 6 项、第 8 项和第 9 项等是相同的。我检查了源表中的原始数据,实际值也与显示的最大值相同30 位,包括小数点。

感谢您的任何帮助。

4

0 回答 0