【问题标题】:Filter a slicer via a cell value通过单元格值过滤切片器
【发布时间】:2019-05-06 22:13:25
【问题描述】:

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

我有切片器“country_of_origin”,它控制三个数据透视表“applications”、“decisions”、“invitations”。 我想通过在单元格 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() 我收到了消息:

编译错误:预期结束子。

我想转换/更正代码,以满足我的需求,即通过我在工作表中手动键入的单元格值的内容来过滤切片器。**

【问题讨论】:

  • 编译错误出现在哪一行?
  • 在第一行,就在启动宏之后。
  • 就在这一行之后? Private Sub Worksheet_Change(ByVal Target As Range) • 我在这里看不到任何错误。您确定您使用的是您显示的代码吗?使用完全相同的换行符? • 实际上,此过程是一个事件,会自动运行,但不能手动运行。 • 请尝试更准确地了解您的问题究竟在哪里
  • 在 ' sheet module 的 line 上方有一行包含 title: Sub Macro6 () 并且在此行之后发生错误。我的问题是编写一个代码,该代码能够通过我在工作表中手动键入的单元格值的内容来过滤切片器。我在帖子中写了关于试验的文章。我需要帮助以这种方式转换代码,以便我的切片器使用过滤器过滤我在单元格 B2 中编写的内容。
  • 删除行sub Macro6()。它标志着一个子的开始 - 就像下一行一样......

标签: excel vba


【解决方案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 是一个事件,不会出现在您可以运行宏的列表中。此宏不能手动运行,它会在每次更改单元格时自动运行。

【讨论】:

  • 我不知道。但无论如何,宏不会在我的切片机上产生。知道可能出了什么问题吗?根据上面帖子中的信息,我还有第二个问题。是否有可能编写包含手动更新切片器选项的代码?这样我写国家的名字,我点击按钮然后切片器更新?
  • @GosiaJankowska 抱歉,每个帖子只能回答一个问题。您将需要提出一个新问题,您需要先自己尝试并询问您是否遇到困难或错误。 • “不工作” 不是错误描述,对我们帮助您毫无用处。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2018-05-18
  • 2023-04-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多