VBA将切片器选择更改为当前选定项
下面的行为非常奇怪。VBA将切片器选择更改为当前选定项,vba,excel,excel-2010,Vba,Excel,Excel 2010,下面的行为非常奇怪。 其目的是使切片器只保留指定的项目(在本例中为“Smith”),而不选择所有其他名称。 大多数情况下,它都可以工作,但有时会选择多个项目 下面的问题是什么?我如何实现所需的行为 Sub myRoutine() unselectAllBut "Slicer_InitialAcc_Surname", "me" End Sub Public Sub unselectAllBut(slicerName As String, newSelection As String)
其目的是使切片器只保留指定的项目(在本例中为“Smith”),而不选择所有其他名称。
大多数情况下,它都可以工作,但有时会选择多个项目 下面的问题是什么?我如何实现所需的行为
Sub myRoutine()
unselectAllBut "Slicer_InitialAcc_Surname", "me"
End Sub
Public Sub unselectAllBut(slicerName As String, newSelection As String)
Dim si As Object
For Each si In ActiveWorkbook.SlicerCaches(slicerName).SlicerItems
si.Selected = (si.Caption = newSelection)
Next si
End Sub
第二次尝试也不起作用:
Public Sub unselectAllBut(slicerName As String, newSelection As String)
Dim i As Integer
With ActiveWorkbook.SlicerCaches(slicerName)
For i = 1 To .SlicerItems.Count
.SlicerItems(i).Selected = (.SlicerItems(i).Caption = newSelection)
Next i
End With
End Sub
可能是数据造成了问题。如下所示:
编辑 下面的方法似乎有效。我首先选择所有项目,这似乎是过度杀戮:
Public Sub unselectAllBut(slicerName As String, newSelection As String)
Dim i As Integer
With ActiveWorkbook.SlicerCaches(slicerName)
For i = 1 To .SlicerItems.Count
.SlicerItems(i).Selected = True
Next i
For i = 1 To .SlicerItems.Count
.SlicerItems(i).Selected = (.SlicerItems(i).Caption = newSelection)
Next i
End With
End Sub
快一点的方法:
- 首先设置新选项
- 第二,清除所有其他
Public Sub unselectAllBut(slicerName作为字符串,newSelection作为字符串)
作为整数的Dim i
使用ActiveWorkbook.SlicerCache(slicerName)
对于i=1到.ms.Count
如果.SlicerItems(i).Caption=newSelection,那么.SlicerItems(i).Selected=True:退出
接下来我
对于i=1到.ms.Count
如果.SlicerItems(i).Selected和.SlicerItems(i).Caption newSelection,则.SlicerItems(i).Selected=False
接下来我
以
端接头
Public Sub unselectAllBut(slicerName As String, newSelection As String)
Dim i As Integer
With ActiveWorkbook.SlicerCaches(slicerName)
For i = 1 To .SlicerItems.Count
If .SlicerItems(i).Caption = newSelection Then .SlicerItems(i).Selected = True: Exit For
Next i
For i = 1 To .SlicerItems.Count
If .SlicerItems(i).Selected And .SlicerItems(i).Caption <> newSelection Then .SlicerItems(i).Selected = False
Next i
End With
End Sub