【问题标题】:Deselect one item with VBA in a pivottable that is added to the data model在添加到数据模型的数据透视表中使用 VBA 取消选择一项
【发布时间】:2020-06-25 23:21:46
【问题描述】:

这是我第一次在这里发帖,我是 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

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

【问题讨论】:

    标签: excel vba


    【解决方案1】:

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

    【讨论】:

      猜你喜欢
      • 2012-11-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多