首页 > 解决方案 > 在添加到数据模型的数据透视表中使用 VBA 取消选择一项

问题描述

这是我第一次在这里发帖,我是 VBA 的新手。

如标题中所述,我想为添加到数据模型的多个数据透视表(都在一张表中)的多个(在此示例中为两个)过滤器取消选择一项。数据透视表的数据被添加到数据模型中,因此可以将值设置为不同的计数(如果不将数据添加到数据模型中,这是不可能的)。

我想取消选择一个项目的原因实际上是我真正想要的解决方法。我将数据添加到源数据(动态命名范围)并刷新数据透视表。但是,由于对数据透视表应用了过滤器,因此不会自动选择新添加的项目。那么,您可能会想为什么不使用“在手动过滤器中包含新项目”选项呢?好吧,因为数据透视表的数据被添加到数据模型中,所以这个选项是灰色的(所以它不能被选中)。

因此,我正在尝试编写一些代码来首先选择所有项目(因此将新添加的项目添加到手动过滤器中)然后取消选择我不想要的项目(因为我事先知道要取消选择哪些项目,因为它们已经是在第一组数据中)。

我曾尝试使用记录的宏,但显然当手动过滤器中的项目被取消选择时,它会记录保留的选定项目。

因为数据透视表的数据被添加到数据模型中,所以代码的编写方式不同。我找到的解决方案仅适用于“常规”数据透视表。

在下面找到我尝试使用的代码。如代码中所述,第一部分有效,只有第二部分无效。我也不知道“HiddenItemsList”属性是否正确。

    Sub DataModel_PivotTable_FilterFields()

    'works - will select all the items in the manual filter
        Worksheets("xxx").PivotTables("PivotTable3").PivotFields( _
            "[xyx].[xxy].[xxy]").VisibleItemsList = Array("")

    'does not work - should deselect the item "zxx" after this part works I will add the other item 
    'to be deselected in the array if possible
        Worksheets("xxx").PivotTables("PivotTable3").PivotFields( _
            "[xyx].[xxy].[xxy]").HiddenItemsList = Array( _
            "[xyx].[xxy].&[zxx]")

    End Sub

有人可以帮我解决这个问题吗?将不胜感激。

标签: excelvba

解决方案


如果有人感兴趣,我通过使用切片器找到了解决方案。我使用的代码取自IG2013的答案。只需更改切片Dim i As LongDim i As String的值是否为字符串。


推荐阅读