通过单元格值过滤切片器

时间:2019-05-06 12:03:01

标签: excel vba

我希望能够通过我在工作表中手动键入的单元格值的内容来过滤切片器。

我有切片器“ country_of_origin”,它控制三个数据透视表“应用程序”,“决策”和“邀请”。 我想通过在单元格B2中手动键入的“原产国”来过滤切片器,而无需滚动切片器列表上的整个国家/地区列表。

我试图记录宏,但是这对我来说不是一个解决方案,因为如果我在工作表的单元格中手动输入国家/地区名称,该宏将无法使用。看起来像这样:

slicer_Country_of_origin")
        .SlicerItems("ALBANIA").Selected = True
        .SlicerItems("AFGHANISTAN").Selected = False
        .SlicerItems("ALGIERIA").Selected = False
        .SlicerItems("ARMENIA").Selected = True
    End With
End Sub

我进一步在mrexcel.com论坛上找到了一些代码,我将其复制,将切片器的名称更改为“原产国”,并将单元格的位置更改为“ $ b $ 2”。

sub Macro6()   
' sheet module
    Private Sub Worksheet_Change(ByVal Target As Range)
        Dim sc As SlicerCache, si As SlicerItem
        If Target.Address = "$B$2" Then                    
            Set sc = ActiveWorkbook.SlicerCaches("Country of origin")      ' desired slicer
            sc.ClearAllFilters
            For Each si In sc.SlicerItems
                If si.Caption = CStr(Target) Then
                    si.Selected = True
                Else
                    si.Selected = False
                End If
            Next
        End If
    End Sub

启动此宏后,在该行之后 sub Macro6() 我收到消息:

  

编译错误:预期结束子。

我想对代码进行转换/更正,因此它将满足我的需要,即根据我在工作表中手动键入的单元格值的内容来过滤切片器。**

1 个答案:

答案 0 :(得分:1)

您的代码无效。一定是

sub Macro6()   
' sheet module
End Sub

Private Sub Worksheet_Change(ByVal Target As Range)
    Dim sc As SlicerCache, si As SlicerItem
    If Target.Address = "$B$2" Then                    
        Set sc = ActiveWorkbook.SlicerCaches("Country of origin")      ' desired slicer
        sc.ClearAllFilters
        For Each si In sc.SlicerItems
            If si.Caption = CStr(Target) Then
                si.Selected = True
            Else
                si.Selected = False
            End If
        Next
    End If
End Sub

请注意,Worksheet_Change是一个事件,不会出现在可以运行宏的列表中。此宏无法手动运行,每次更改单元时它都会自动运行。