Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/excel/27.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_Excel Formula_Vba - Fatal编程技术网

Excel 条件透视表筛选(如果选择了一个,则禁用另一个)

Excel 条件透视表筛选(如果选择了一个,则禁用另一个),excel,excel-formula,vba,Excel,Excel Formula,Vba,正如标题所说,如果另一个过滤器被选中,我将尝试禁用或将其默认设置为“全部” 例如,我有一个具有两个过滤器的透视表-“周”和“月” 如果有人在周过滤器中选择了一个值,我希望月过滤器默认为“(全部)”,反之亦然 非常简单,但我不确定如何攻击它(VBA或公式)以及代码 谢谢大家 不幸的是,没有跟踪数据透视表字段更改的事件。因此,我的想法如下。 第一步。放置公共变量: Public tmpM As Boolean Public tmpW As Boolean 第二步。在放置数据透视表的图纸模块中,输入

正如标题所说,如果另一个过滤器被选中,我将尝试禁用或将其默认设置为“全部”

例如,我有一个具有两个过滤器的透视表-“周”和“月”

如果有人在周过滤器中选择了一个值,我希望月过滤器默认为“(全部)”,反之亦然

非常简单,但我不确定如何攻击它(VBA或公式)以及代码


谢谢大家

不幸的是,没有跟踪数据透视表字段更改的事件。因此,我的想法如下。 第一步。放置公共变量:

Public tmpM As Boolean
Public tmpW As Boolean
第二步。在放置数据透视表的图纸模块中,输入以下代码:

Private Sub Worksheet_PivotTableUpdate(ByVal Target As PivotTable)
On Error GoTo ErrorHandler
Application.EnableEvents = False

If Target.PivotFields("week").AllItemsVisible = False And tmpW = True Then
    Target.PivotFields("month").ClearAllFilters
End If
If Target.PivotFields("month").AllItemsVisible = False And tmpM = True Then
    Target.PivotFields("week").ClearAllFilters
End If
tmpM = Target.PivotFields("month").AllItemsVisible
tmpW = Target.PivotFields("week").AllItemsVisible

Application.EnableEvents = True

Exit Sub
ErrorHandler:
Application.EnableEvents = True
End Sub
它适用于我的示例数据


编辑:上面代码中的错误处理。

非常感谢。我是否可以引用单元格而不是“周”或“月”?因为此值将根据选择而更改。不,没有,因为我们无法读取您更改的过滤器的单元格。但您可以通过数据透视字段在表结构中的位置来读取数据透视字段。如果在行方向上始终有两个字段,那么就无法传递此信息。我们是否可以执行类似于If Target.PivotFields(“全部”)的操作,或者甚至执行类似于If Target.PivotFields(“一月”、“二月”)的范围操作?我似乎无法实现这一点-我已将“周”和“月”替换为可通过筛选器选择的值(“第3周”)&“二月”),它似乎对我仍然不起作用。我收到以下错误:无法获取数据透视表类别1的PivotFields属性。如果需要,您可以遍历每个数据透视字段并设置每个
。ClearAllFilters
。简单的循环就可以了。2.我通过添加一些错误处理指令改进了代码。它将与新字段名一起使用。您可能在前面发生了一个错误,该错误停止了事件处理。请设置
Application.EnableEvents=True
,改进代码,应该可以工作。