【发布时间】: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
有人可以帮我解决这个问题吗?将不胜感激。
【问题讨论】: