【发布时间】:2020-01-14 15:10:45
【问题描述】:
请注意,这是我第一次在论坛上提问。所以如果我不遵守礼仪,请提前道歉。
我有 3 个数据透视表,每个都有自己的数据集,每个都有 3 个切片器。 数据透视表中的数据具有不同的值并且具有不同的大小。但是,有 3 个链接列具有相同/相似的标识符。 Project、Package 和 Discipline 是 3 个数据集中的通用标识符。每个人都有一个切片机。
我正在尝试通过 vba 链接它们。我编写了一些代码,旨在循环通过第一个切片器中的每个过滤器,如果它被选中,那么它应该在第二个切片器中选择相应的过滤器。 我无法弄清楚为什么它不起作用。据我所知,它与“切片缓存中的每个项目”有关。但除此之外,我无法绕过它。
我什至尝试了一些简化的代码,只是为了检查我是否理解了基础知识,但这也不起作用。
简化代码:
'Sub Test()
Dim sc As SlicerCache
Dim si As SlicerItem
Set sc = ThisWorkbook.SlicerCaches("Slicer_Project")
For Each si In sc.SlicerItems
If si.Selected = True Then
si.Selected = False
Else
si.Selected = True
End If
Next si
End Sub
完整代码:
Sub Sort_Slicers()
Dim Master_Slice As SlicerCache, Subject_Slice As SlicerCache
Dim Ctr As Integer, Ctr2 As Integer
Dim Sl_Item As SlicerItem
Dim wb As Workbook
TurnStuffOff
Set wb = ThisWorkbook
For Ctr = 1 To 3
If Ctr = 1 Then
Set Master_Slice = wb.SlicerCaches("Slicer_Project")
ElseIf Ctr = 2 Then
Set Master_Slice = wb.SlicerCaches("Slicer_Package")
ElseIf Ctr = 3 Then
Set Master_Slice = wb.SlicerCaches("Slicer_Disc")
End If
For Ctr2 = 1 To 2
If Ctr2 = 1 Then
If Ctr = 1 Then
Set Subject_Slice = wb.SlicerCaches("Slicer_Project1")
ElseIf Ctr = 2 Then
Set Subject_Slice = wb.SlicerCaches("Slicer_Package1")
ElseIf Ctr = 3 Then
Set Subject_Slice = wb.SlicerCaches("Slicer_Disc1")
End If
Else
If Ctr = 1 Then
Set Subject_Slice = wb.SlicerCaches("Slicer_Project2")
ElseIf Ctr = 2 Then
Set Subject_Slice = wb.SlicerCaches("Slicer_Package2")
ElseIf Ctr = 3 Then
Set Subject_Slice = wb.SlicerCaches("Slicer_Disc2")
End If
End If
Subject_Slice.ClearAllFilters
On Error Resume Next
For Each Sl_Item In Master_Slice.SlicerItems
If Sl_Item.Selected = True Then
Subject_Slice.Sl_Item.Selected = True
Else
Subject_Slice.Sl_Item.Selected = False
End If
Next Sl_Item
On Error GoTo 0
Next Ctr2
Next Ctr
TurnStuffOn
End Sub
【问题讨论】:
-
问得好问题!欢迎来到 SO。是否抛出任何错误?
-
在主代码上,没有抛出任何错误,只是没有达到目标。在简化版本上,我得到'运行时错误1004应用程序定义或对象定义错误'
-
你看过我的帖子了吗:jkp-ads.com/Articles/slicers04.asp
-
@jkpieterse 快速浏览了一下,似乎我的应该在此之后工作。除非我错过了什么。我的工作表是这样设置的:最终用户只能看到三个切片器中的一个,另外两个隐藏在其他工作表中。所以我希望我可以设置它,这样他们只需要与 3 个枢轴之一的切片器交互,但会影响所有数据。
标签: excel vba filter pivot-table