我有3个使用相同源数据的数据透视表。我有按月预算和实际数字(3列-月,预算,实际)。
我为月份创建了一个切片器,并且只想显示具有实际数字的月份(例如1月至6月)。现在,它显示了所有月份,因为存在全年的预算数字。如何使用VBA代码实现这一目标?
第一步,我在数据透视表上尝试了一个值过滤器,但出现错误。我的计划是先过滤实际不等于零个月的数据透视表,然后将选择的月份应用于切片器。
Sub filtermonth()
'
' filtermonth Macro
'
ActiveSheet.PivotTables("PivotTable4").PivotFields("Month").PivotFilters.Add2 _
Type:=xlValueDoesNotEqual, DataField:=ActiveSheet.PivotTables("PivotTable4" _
).PivotFields("Actuals"), Value1:=0
End Sub
运行此程序时出现以下错误
运行时错误1004:无法获取以下内容的PivotFields属性 数据透视表类
答案 0 :(得分:0)
我想,您将“月”作为行字段并将“实际总和”(重命名为“实际”)作为数据字段。
如果已对值进行过滤,则会出现错误,因此需要先清除过滤器。
通过以下代码,您可以在切片器中打开/关闭月份名称的可见性:
Sub HideUnnecessaryMonths()
Dim pt As PivotTable
Dim pfMonth As PivotField, pfActuals As PivotField
Dim r As Range
Dim i As Long
Set pt = ActiveSheet.PivotTables("PivotTable4")
Set pfMonth = pt.PivotFields("Month")
Set pfActuals = pt.PivotFields("Actuals")
pfMonth.ClearAllFilters
pfMonth.PivotFilters.Add2 _
Type:=xlValueDoesNotEqual, _
DataField:=pfActuals, _
Value1:=0
For i = 1 To 12 ' each month
On Error Resume Next
Set r = pt.GetPivotData("Actuals", pfMonth.Name, i)
If Err.Number <> 0 Then
On Error GoTo 0
pfMonth.PivotItems(i + 1).Visible = False
End If
On Error GoTo 0
Next i
End Sub
备注,如果要在切片器中完全隐藏月份的名称,
只要您还拥有“预算作为数据”字段(例如“预算总和”),就无法在切片器中完全隐藏月份名称:
仅如果您将“预算”显示为第二行字段(这将是无用的,因为您看不到汇总预算),则可以编辑切片器的设置并禁用“隐藏无数据的项目”。然后,切片器将显示减少的月份名称列表。