Excel 基于透视表过滤的动态更新切片器选择
我有3个数据透视表使用相同的源数据。我有每月的预算和实际数字(3列-月、预算、实际) 我为月份创建了一个切片器,只想显示有实际数字的月份(例如一月到六月)。现在,它显示了所有月份,因为全年都有预算数字。如何使用VBA代码实现这一点 作为第一步,我在pivot表上尝试了一个值过滤器,但是我得到了一个错误。我的计划是首先过滤实际不等于零个月的透视表,然后将所选月份应用于切片器Excel 基于透视表过滤的动态更新切片器选择,excel,vba,pivot-table,Excel,Vba,Pivot Table,我有3个数据透视表使用相同的源数据。我有每月的预算和实际数字(3列-月、预算、实际) 我为月份创建了一个切片器,只想显示有实际数字的月份(例如一月到六月)。现在,它显示了所有月份,因为全年都有预算数字。如何使用VBA代码实现这一点 作为第一步,我在pivot表上尝试了一个值过滤器,但是我得到了一个错误。我的计划是首先过滤实际不等于零个月的透视表,然后将所选月份应用于切片器 Sub filtermonth() ' ' filtermonth Macro ' Ac
Sub filtermonth()
'
' filtermonth Macro
'
ActiveSheet.PivotTables("PivotTable4").PivotFields("Month").PivotFilters.Add2 _
Type:=xlValueDoesNotEqual, DataField:=ActiveSheet.PivotTables("PivotTable4" _
).PivotFields("Actuals"), Value1:=0
End Sub
当我运行此命令时,出现以下错误
运行时错误1004:无法获取的数据透视字段属性
数据透视表类
我猜,行字段是“月”,数据字段是“实际值之和”(重命名为“实际值”)
如果值已被过滤,则会出现错误,因此需要在之前清除过滤器
通过以下代码,可以在切片器中打开/关闭月份名称的可见性:
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
Sub-HideUnnecessaryMonths()
数据透视表
将pfMonth作为数据透视字段,pfActuals作为数据透视字段
调光范围
我想我会坚持多久
Set pt=ActiveSheet.PivotTables(“PivotTable4”)
设置pfMonth=pt.PivotFields(“月”)
设置pfActuals=pt.PivotFields(“实际值”)
pfMonth.ClearAllFilters
pfMonth.PivotFilters.Add2_
类型:=xlValueDoesNotEqual_
数据字段:=pfActuals_
值1:=0
对于i=1至12’,每月
出错时继续下一步
Set r=pt.GetPivotData(“实际值”,pfMonth.Name,i)
如果错误号为0,则
错误转到0
pfMonth.PivotItems(i+1).Visible=False
如果结束
错误转到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
- 您可以打开/关闭单个月份的可见性,
但是切片器仍然显示所有月份(标记或不标记) - 您可以使用日期筛选器来减少数据透视行,
但切片机仍然显示所有月份 - 您可以使用值过滤器,例如。G“实际值”>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
Sub-HideUnnecessaryMonths()
数据透视表
将pfMonth作为数据透视字段,pfActuals作为数据透视字段
调光范围
我想我会坚持多久
Set pt=ActiveSheet.PivotTables(“PivotTable4”)
设置pfMonth=pt.PivotFields(“月”)
设置pfActuals=pt.PivotFields(“实际值”)
pfMonth.ClearAllFilters
pfMonth.PivotFilters.Add2_
类型:=xlValueDoesNotEqual_
数据字段:=pfActuals_
值1:=0
对于i=1至12’,每月
出错时继续下一步
Set r=pt.GetPivotData(“实际值”,pfMonth.Name,i)
如果错误号为0,则
错误转到0
pfMonth.PivotItems(i+1).Visible=False
如果结束
错误转到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
- 您可以打开/关闭单个月份的可见性,
但是切片器仍然显示所有月份(标记或不标记) - 您可以使用日期筛选器来减少数据透视行,
但切片机仍然显示所有月份 - 您可以使用值过滤器,例如。G“实际值”>0,
但切片机仍然显示所有月份
只有当您将“预算”显示为第二行字段时(这将是无用的,因为您无法看到汇总的预算),才可以编辑切片器的设置并禁用“隐藏无数据项”。然后,切片器将显示月份名称的简化列表。我将clearfilters行添加到代码中,但仍会收到相同的错误。请选择一个月份,并使用宏记录器录制一个宏,同时将值筛选器设置为“Actuals 0”,并查看您的代码是否存在差异。数据透视字段的名称可能是“Month2”左右…我将clearfilters行添加到代码中,但仍然收到相同的错误。请选择一个月,并使用宏记录器录制一个宏,同时将值筛选器设置为“Actuals 0”,并查看您的代码是否存在差异。数据透视字段的名称可能是“Month2”左右。。。