将下拉选择链接到切片器

时间:2018-07-19 06:59:35

标签: vba excel-vba

我有一个下拉列表(excel数据验证),具有与切片器相同的选项(均来自不同来源)。

有人可以和我分享如何将我的下拉列表选择链接到切片器的VBA代码吗?当我运行宏并在下拉列表中进行选择时,显然没有任何记录。因此,我不知道如何开始。

例如 下拉列表:区域1,区域2,区域3 切片器:区域1,区域2,区域3 目的:如果我从下拉列表中选择“区域3”,则切片器也应选择“区域3”。

编辑:为清楚起见

1 个答案:

答案 0 :(得分:0)

您需要一个Change的事件例程,该例程将在下拉列表所在的单元格发生更改时触发,并需要一个例程来更改切片器。

将以下代码放入VBA-Editor中的工作表对象(而不是新模块)。更改单元格地址(在示例中为E10到您正在使用的单元格)。如果工作簿中有多个切片器,则必须将索引从SlicerCaches更改为要修改的切片器(与VBA一样,您可以使用索引号或名称)。

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

以下例程可以放在事件例程下面,也可以放在模块中。请注意,如果未在切片器中找到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

编辑:已更改SelectSlicerItem以处理默认项目。