【问题标题】:vba select slicer item excelvba选择切片器项目excel
【发布时间】:2017-01-23 14:16:30
【问题描述】:

我最近发现了 VBA 代码,可以根据变量名过滤切片器。它是过滤您想看到的内容的好工具

我的代码中的下一步是可能从我的数据透视表/图表中删除可见数据(自动)。

假设我已经有一个变量“Remove_ITEM”需要从显示的数据中删除。 Remove_item 在切片器(“slicer_Order”)内。

数据也在数据模型中。

以下代码仅显示 REmove_Item:

ActiveWorkbook.SlicerCaches("Slicer_Order").'VisibleSlicerItemsList = ("[Actuals_Table].[Order].&["& Remove_item &"]")

现在我想做相反的事情

【问题讨论】:

  • ActiveWorkbook.SlicerCaches("Slicer_Order").SlicerItems(Remove_Item).Selected=False 呢?
  • 这给了我运行时错误'1004':
  • 还有Slicers("Slicer_Order").SlicerItems(Remove_Item).Selected=Fa‌​lse?您是否将Remove_Item 的值设置为可能的值(即Remove_Item = "StringToRemove")
  • 为了简单地检查您的代码,我将 remove_item 替换为我想要删除的实际值。 ActiveWorkbook.SlicerCaches("Slicer_Order").SlicerItems("[Actuals_Table].[Order].&[000010961612]").Selected = False
  • 我将创建一个数组并执行相反的操作。 >(将切片器中的所有项目显示为数组)>(从数组中删除我不想看到的项目)>(创建循环以仅显示数组中的项目)

标签: vba excel


【解决方案1】:

我希望我能理解您在帖子中想要达到的目标。

试试下面的代码,让我知道它是否如你所愿:

Option Explicit

Sub SlicersTst()

Dim WB                      As Workbook
Dim OrderSlcrCache          As SlicerCache
Dim OrderSlcItem            As SlicerItem
Dim RemoveItem              As Variant

Set WB = ThisWorkbook

Set OrderSlcrCache = WB.SlicerCaches("Slicer_Order") '<-- set Slicer Cache to "Order" slicer
OrderSlcrCache.ClearManualFilter '<-- clear manual filters

RemoveItem = "c" '<-- set value for test

' loop through all slicer items in slicer "Order"
For Each OrderSlcItem In OrderSlcrCache.SlicerItems
    If OrderSlcItem.Name = RemoveItem Then OrderSlcItem.Selected = False
Next OrderSlcItem

End Sub

【讨论】:

  • 我在使用 OrderSlcItem 时遇到了麻烦,但我取得了一些突破。如果我将要选择的项目放入数组中(并确保由于数据模型而在其周围具有正确的定义。我得到这个: Dim Arr() As String ReDim Arr(1 To 2) Arr(1) = "[Actuals_Table].[Order].&[000010840921]" Arr(2) = "[Actuals_Table].[Order].&[000010949159]" ActiveWorkbook.SlicerCaches("Slicer_order").VisibleSlicerItemsList = Arr()数组效果很好!
  • 那么现在它对你有用了吗?您可以添加您的枢轴屏幕截图并切片您的帖子吗?我想知道这段代码(对我有用)对你不起作用
【解决方案2】:

请记住,这专门用于通过连接使用数据模型。

Sub Variables()
Part_Number = Worksheets("Solumina_Data_Page").Cells(Row, "B").Value
End Sub


Sub Sort_Part_Number()
Application.ScreenUpdating = False
Page1 = ActiveSheet.Name
Call Variables


Sheets("Dashboard").Activate

    ActiveWorkbook.SlicerCaches("Slicer_Material").VisibleSlicerItemsList = "[Part List].[Material].&[" & Part_Number & "]"
'    "[Part List].[Material].&[77C726210G1]" <<What we want to see

Sheets(Page1).Activate
Application.ScreenUpdating = True
End Sub

这是一个使用数组的类似示例

Sub Use_ARRAY()


Dim ARR() As String
ReDim ARR(1 To 2)
Call Array_Actuals_Data 'get data
Call Array_Outliers_removed 'sort data

ARR(1) = "[Actuals_Table].[Order].&[000010840921]"
ARR(2) = "[Actuals_Table].[Order].&[000010949159]"

ActiveWorkbook.SlicerCaches("Slicer_order").VisibleSlicerItemsList = ARR()

End Sub

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-09-14
    • 1970-01-01
    相关资源
    最近更新 更多