VBA De-Select 所有切片器选项(1 除外)
VBA De-Select All Slicer Options (except 1)
下面的代码给出了一个奇怪的结果。
切片器有 22 个选项(顶部的 #1 到底部的 #22)。
如果我目前有 #12 selected,然后是 运行 代码,它将 select 切片器选项 1-12。如果 X = 当前 selected 切片器选项的 #,代码将 select 1 - X,下面的选项保持未 selected。以上只是一个示例,并不意味着显示一个自然的或期望的起点。
其他可能相关的信息:
多 select = 真,
倒数第二个选项 = "",
最后一个选项 -"blank"
我想要代码做的是 select 倒数第三个选项,这是第一个(从底部)不是空白或空数据的选项。这解释了注释掉的行。
但是,我不明白为什么下面的代码没有取消select所有选项。
Sub Slicer()
Dim WB As Workbook
Set WB = ThisWorkbook
Dim i As Integer
Dim n As Integer
With WB.SlicerCaches("Slicer_Processed_date")
n = .SlicerItems.Count
For i = 1 To n
If .SlicerItems(i).Selected = True Then
.SlicerItems(i).Selected = False
End If
Next i
'.SlicerItems(n - 2).Selected = True
End With
End Sub
您不能取消选择所有项目。您必须始终保留一项可见,否则 VBA 将引发错误。
如果您想要现成的代码来过滤数组上的切片器,请在
查看我的回答
如果你愿意,那个数组可以只包含一个东西。该代码中的注释将帮助您了解如何有效地过滤切片器。
编辑:现在我明白你需要什么了,使用这个:
Sub SliceByIndex()
Dim sc As SlicerCache
Dim si As SlicerItem
Dim l As Long
Dim i As Long
Set sc = ThisWorkbook.SlicerCaches("Slicer_Test")
l = sc.SlicerItems.Count
With sc
.PivotTables(1).ManualUpdate = True 'Stops PivotCache recalculating until we are done
' Select the first item, because one item MUST remain visible at all times.
' We'll unselected it when we're done
.SlicerItems(1).Selected = True
'Deselect everything else
For i = 2 To l
.SlicerItems(i).Selected = False
Next i
'Select the desired item
.SlicerItems(l - 2).Selected = True
'Deselect the first items
.SlicerItems(1).Selected = False
'Turn the PivotCache calculation on again
.PivotTables(1).ManualUpdate = False
End With
End Sub
下面的代码给出了一个奇怪的结果。 切片器有 22 个选项(顶部的 #1 到底部的 #22)。
如果我目前有 #12 selected,然后是 运行 代码,它将 select 切片器选项 1-12。如果 X = 当前 selected 切片器选项的 #,代码将 select 1 - X,下面的选项保持未 selected。以上只是一个示例,并不意味着显示一个自然的或期望的起点。
其他可能相关的信息: 多 select = 真, 倒数第二个选项 = "", 最后一个选项 -"blank"
我想要代码做的是 select 倒数第三个选项,这是第一个(从底部)不是空白或空数据的选项。这解释了注释掉的行。
但是,我不明白为什么下面的代码没有取消select所有选项。
Sub Slicer()
Dim WB As Workbook
Set WB = ThisWorkbook
Dim i As Integer
Dim n As Integer
With WB.SlicerCaches("Slicer_Processed_date")
n = .SlicerItems.Count
For i = 1 To n
If .SlicerItems(i).Selected = True Then
.SlicerItems(i).Selected = False
End If
Next i
'.SlicerItems(n - 2).Selected = True
End With
End Sub
您不能取消选择所有项目。您必须始终保留一项可见,否则 VBA 将引发错误。
如果您想要现成的代码来过滤数组上的切片器,请在
如果你愿意,那个数组可以只包含一个东西。该代码中的注释将帮助您了解如何有效地过滤切片器。
编辑:现在我明白你需要什么了,使用这个:
Sub SliceByIndex()
Dim sc As SlicerCache
Dim si As SlicerItem
Dim l As Long
Dim i As Long
Set sc = ThisWorkbook.SlicerCaches("Slicer_Test")
l = sc.SlicerItems.Count
With sc
.PivotTables(1).ManualUpdate = True 'Stops PivotCache recalculating until we are done
' Select the first item, because one item MUST remain visible at all times.
' We'll unselected it when we're done
.SlicerItems(1).Selected = True
'Deselect everything else
For i = 2 To l
.SlicerItems(i).Selected = False
Next i
'Select the desired item
.SlicerItems(l - 2).Selected = True
'Deselect the first items
.SlicerItems(1).Selected = False
'Turn the PivotCache calculation on again
.PivotTables(1).ManualUpdate = False
End With
End Sub