【问题标题】:How to select multiple slicer items of one slicer with different checkboxes?如何使用不同的复选框选择一个切片器的多个切片器项目?
【发布时间】:2019-07-30 17:57:55
【问题描述】:

我的目的:在我的文件表中,有一个复选框列表,我可以选中这些复选框,以便选择位于我文件的另一表中的切片器“A”的特定切片项。

一旦我选择了复选框,我就成功编写了一个代码,以便选择切片器“A”的切片器项目(例如,当我单击复选框“RD”时,它会在切片器中选择切片器项目“RD” 'A')

但是,我无法使用复选框选择一个切片器的多个切片器项目

我尝试编写代码来一次选择一个切片器项目并且它正在工作。当我单击工作表“报告”中的复选框时,我的工作簿工作表中的切片器项目被选中

我试过这段代码

Sub CheckBox105_Click()

Dim sC As SlicerCache
Dim department(0 To 21) As Variant

Set sC = ThisWorkbook.SlicerCaches("Slicer_Department")

Application.EnableEvents = False

For i = 0 To 21
   department(i) = sC.SlicerItems(i + 1).Name
Next i

sC.VisibleSlicerItemsList = department

            sC.SlicerItems("RR").Selected = True
            sC.SlicerItems("FD").Selected = False
            sC.SlicerItems("HG").Selected = False
            sC.SlicerItems("BP").Selected = False
            sC.SlicerItems("HH").Selected = False
            sC.SlicerItems("CO").Selected = False
            sC.SlicerItems("CO").Selected = False
            sC.SlicerItems("YH").Selected = False
            sC.SlicerItems("LI").Selected = False
            sC.SlicerItems("ED").Selected = False
            sC.SlicerItems("FI").Selected = False
            sC.SlicerItems("GM").Selected = False
            sC.SlicerItems("GU").Selected = False
            sC.SlicerItems("HR").Selected = False
            sC.SlicerItems("IT").Selected = False
            sC.SlicerItems("LE").Selected = False
            sC.SlicerItems("OP").Selected = False
            sC.SlicerItems("RK").Selected = False
            sC.SlicerItems("SRG").Selected = False
            sC.SlicerItems("BRM").Selected = False
            sC.SlicerItems("DT").Selected = False
            sC.SlicerItems("IC").Selected = False
            sC.SlicerItems("(blank)").Selected = False

Application.EnableEvents = True

使用此代码,我期望的结果如下: 我选择了 checkboxe105 并选择了切片器项目“RD” 我选择 checkoxe106 并选择切片器项目“FD”并保持第一个切片器项目“RD”处于选中状态

【问题讨论】:

  • 我不知道您为什么要使用复选框,但我会将您要选择的项目放入字典中,清除切片器上的所有过滤器,然后遍历切片器:For Each SI in SC.VisibleSlicerItems然后If Not Dictionary.Exists(SI.Name) Then SI.Selected = False
  • 嗨达米安,我听从了你的建议,但代码不起作用,你能否提供更多关于你告诉我的细节?我对这段代码不熟悉,非常感谢!
  • 我做了这段代码,但它仍然不起作用: Dim sC As SlicerCache Dim si As sliceritem Dim dict As New Scripting.dictionary Set sC = ThisWorkbook.SlicerCaches("Slicer_Department") dict.Add Key :="GB", Item:=8 dict.Add Key:="GM", Item:=9 sC.ClearManualFilter For Each si In sC.VisibleSlicerItems If Not dict.Exists(si.Name) Then si.Selected = False下一个

标签: excel vba checkbox items slicers


【解决方案1】:

免责声明:正在启动 VBA,因此请删除此问题以解决误解/不理解问题。

您能否将您的数组/循环与 .SlicerItems(index OR Name).Selected = True 一起使用。注意在取消选中时需要写一些东西来取消选择切片器项目。

私有子 CheckBox7_Click()

With ActiveWorkbook.SlicerCaches("Slicer_Product")
    .SlicerItems("Baby Clothes").Selected = True
    .SlicerItems("Diamonds").Selected = True
    .SlicerItems("Hats").Selected = True
    .SlicerItems("Kid Activities").Selected = True
End With

私有子 CheckBox4_Click()

With ActiveWorkbook.SlicerCaches("Slicer_Product")
    .SlicerItems(1).Selected = True
End With

结束子

私有子 CheckBox5_Click()

With ActiveWorkbook.SlicerCaches("Slicer_Product")
    .SlicerItems(1).Selected = True
    .SlicerItems(2).Selected = True
End With

私有子 CheckBox6_Click()

With ActiveWorkbook.SlicerCaches("Slicer_Product")
    .SlicerItems(1).Selected = True
    .SlicerItems(2).Selected = True
    .SlicerItems(3).Selected = True
End With

结束子

'私人子CheckBox1_Click() ' '选择/取消选择帽子复选框 ' 如果 CheckBox1.Value = True 那么 ' 调用 AddHat ' ElseIf CheckBox1.Value = False Then ' 调用 RemoveHats ' 别的 ' MsgBox "帮助" ' 万一 ' '结束子

【讨论】:

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