Excel 将下拉选择链接到切片器
我有一个下拉列表(Excel数据验证),其中的选项与切片器相同(都来自不同的源) 如何将下拉列表选择链接到切片器 在下拉列表中进行选择时,不会记录任何内容 例如Excel 将下拉选择链接到切片器,excel,vba,Excel,Vba,我有一个下拉列表(Excel数据验证),其中的选项与切片器相同(都来自不同的源) 如何将下拉列表选择链接到切片器 在下拉列表中进行选择时,不会记录任何内容 例如 目标:如果我从下拉列表中选择了区域3,我的切片器也应该选择区域3。您需要一个事件例程来进行Change,该例程在下拉列表所在的单元格发生更改时触发,还需要一个例程来更改切片器 将以下代码放入VBA编辑器中的工作表对象(而不是新模块)。将单元格地址(在本例中为E10更改为您正在使用的单元格)。如果工作簿中有多个切片器,则必须将索引Slic
目标:如果我从下拉列表中选择了区域3,我的切片器也应该选择区域3。您需要一个事件例程来进行
Change
,该例程在下拉列表所在的单元格发生更改时触发,还需要一个例程来更改切片器
将以下代码放入VBA编辑器中的工作表对象(而不是新模块)。将单元格地址(在本例中为E10
更改为您正在使用的单元格)。如果工作簿中有多个切片器,则必须将索引SlicerCaches
更改为要修改的索引(在VBA中,通常可以使用索引号或名称)
以下例程可以放在事件例程的下面,也可以放在模块中。请注意,如果切片器中未找到itemText
,则将选择所有项目
Sub SelectSlicerItem(sc As SlicerCache, itemText As String, Optional defaultItem As String = "")
Dim si As SlicerItem, found As Boolean
found = False
sc.ClearManualFilter
For Each si In sc.SlicerItems
' Debug.Print si.Caption, si.value
If si.Caption <> itemText Then
si.Selected = False
found = True
End If
Next si
If Not found And defaultItem <> "" Then SelectSlicerItem sc, defaultItem
End Sub
Sub-SelectSlicerItem(sc为SlicerCache,itemText为String,可选的defaultItem为String=”“)
Dim si作为SlicerItem,作为布尔值找到
发现=错误
sc.ClearManualFilter
对于sc中的每个si
'Debug.Print si.Caption,si.value
如果是si.Caption itemText,那么
si.Selected=False
找到=真
如果结束
下一个si
如果未找到默认项“”,则选择SlicerItem sc,defaultItem
端接头
编辑:已更改
选择SlicerItem
以处理默认项。您有什么样的下拉列表?它是在Excel表格上还是在表格上?它是ActiveX控件还是窗体控件?还是数据验证下拉列表?这是excel中的数据验证下拉列表。谢谢。如果可能的话,请再问几个问题。(1) 我的下拉列表在另一张工作表上。我试着用切片器工作表上的一个单元格引用下拉列表来简化事情,但它不起作用。我相信这是因为工作表的更改需要用户输入。你对此有何建议?(2) 我已经设置了3个切片器,如果在所有3个切片器中都找到itemText,那么您的代码就可以工作。但是,正如您所提到的,如果未找到itemText,则将选择所有项目。如果找不到itemText,您对如何选择“(空白)”有何建议?非常感谢!(1) 事件例程必须位于下拉列表所在的工作表中。(2) 我添加了一个(可选)默认参数,用(blank)
作为第三个参数调用例程。但是,如果切片器中也缺少该默认选项,则所有项目都将被选中-这是切片器的性质。
Option Explicit
' The Event routine
Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Address(False, False) = "E10" Then
SelectSlicerItem ThisWorkbook.SlicerCaches(1), Target.value
End If
End Sub
Sub SelectSlicerItem(sc As SlicerCache, itemText As String, Optional defaultItem As String = "")
Dim si As SlicerItem, found As Boolean
found = False
sc.ClearManualFilter
For Each si In sc.SlicerItems
' Debug.Print si.Caption, si.value
If si.Caption <> itemText Then
si.Selected = False
found = True
End If
Next si
If Not found And defaultItem <> "" Then SelectSlicerItem sc, defaultItem
End Sub