【发布时间】:2020-01-18 17:46:34
【问题描述】:
我有一个数据透视表,我试图通过 VBA 向其中添加标签过滤器(在单个列上)。
我当前的代码是:
Sub Filter__Pivot()
Application.ScreenUpdating = False
Worksheets("Summary").PivotTables("Pivot1").PivotFields("Sales"). _
ClearAllFilters
Worksheets("Summary").PivotTables("Pivot1").PivotSelect _
"Sales[All]", xlLabelOnly, True
Worksheets("Summary").PivotTables("Pivot1").PivotFields("Sales"). _
PivotFilters.Add2 Type:=xlCaptionIsNotBetween, Value1:="-10", Value2:= _
"10"
Application.ScreenUpdating = True
End Sub
代码运行没有错误,并且枢轴具有正在应用的过滤器的外观。我的意思是在我想要的枢轴列上有一个典型的过滤器图标。单击此标题图标显示已应用标签过滤器,当我单击过滤器本身时:过滤器在标题->标签过滤器->不在之间......我看到 -10 和 10 在值字段。问题是数据透视表中的实际数据没有反映过滤器 - 它尚未应用(即 -10 和 10 之间的值仍然可见)。
我尝试了宏录制并且我的语法匹配。我也尝试在放置过滤器后使用Worksheets("Summary").PivotTables("Pivot1").PivotCache.Refresh,但这没有帮助。
奇怪的是,如果我通过 VBA 应用过滤器,然后如上所述单击通过,当我在“非介于”过滤器上看到 -10 和 10 时单击“确定”时,过滤器就会激活并且数据透视表中的数据反映了过滤器。
实质上,我的过滤器被放置在数据透视表上,但它没有“执行”,并且数据透视表数据没有反映在其上似乎处于活动状态的过滤器。
谢谢大家!
更新:
我创建了以下代码:
With Worksheets("Summary").PivotTables("Pivot1").PivotFields("Sales")
For i = 1 To .PivotItems.count
If i > -10 And i < 10 Then
.PivotItems(i).Visible = False
Else
.PivotItems(i).Visible = True
End If
Next i
End With
这不是根据我的数据透视表的销售列中的值进行评估和过滤,但它确实会移动/过滤表中的数据。有没有办法调整这种方法并循环或遍历每个枢轴线并根据销售列中的值更改.Visibility?
这将是完全使用过滤器的一种解决方法,但可能会达到我的需要。
谢谢!
【问题讨论】:
-
奇怪的是枢轴缓存更新没有解决这个问题。出于好奇,在宏末尾添加
ThisWorkbook.RefreshAll有什么效果吗? -
@ChrisB 我试过了 - 它产生了相同的“应用过滤器”,但表中没有实际的数据过滤。
标签: excel vba pivot-table