我希望能够通过我在工作表中手动键入的单元格值的内容来过滤切片器。
我有切片器“ 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()
我收到消息:
编译错误:预期结束子。
我想对代码进行转换/更正,因此它将满足我的需要,即根据我在工作表中手动键入的单元格值的内容来过滤切片器。**
答案 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
是一个事件,不会出现在可以运行宏的列表中。此宏无法手动运行,每次更改单元时它都会自动运行。