Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/excel/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Excel 基于透视表过滤的动态更新切片器选择_Excel_Vba_Pivot Table - Fatal编程技术网

Excel 基于透视表过滤的动态更新切片器选择

Excel 基于透视表过滤的动态更新切片器选择,excel,vba,pivot-table,Excel,Vba,Pivot Table,我有3个数据透视表使用相同的源数据。我有每月的预算和实际数字(3列-月、预算、实际) 我为月份创建了一个切片器,只想显示有实际数字的月份(例如一月到六月)。现在,它显示了所有月份,因为全年都有预算数字。如何使用VBA代码实现这一点 作为第一步,我在pivot表上尝试了一个值过滤器,但是我得到了一个错误。我的计划是首先过滤实际不等于零个月的透视表,然后将所选月份应用于切片器 Sub filtermonth() ' ' filtermonth Macro ' Ac

我有3个数据透视表使用相同的源数据。我有每月的预算和实际数字(3列-月、预算、实际)

我为月份创建了一个切片器,只想显示有实际数字的月份(例如一月到六月)。现在,它显示了所有月份,因为全年都有预算数字。如何使用VBA代码实现这一点

作为第一步,我在pivot表上尝试了一个值过滤器,但是我得到了一个错误。我的计划是首先过滤实际不等于零个月的透视表,然后将所选月份应用于切片器

    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”左右。。。