0

出色地。我在 Excel 的工作表上有一个名为“ALL_INFO”的表,我在另一个工作表中创建了一个数据透视表,它的名称是“PIVOT_INFO”。而且我想知道链接表的方法,以及使用切片器过滤信息的数据透视表,并将其反映在两个表中。

有人知道我该怎么做吗?

先感谢您。

4

1 回答 1

4

为数据透视表创建一个切片器,为表创建一个切片器。确保 PT Slicer 可见,并且 Table Slicer 隐藏在用户看不到的地方。然后将此代码放入与您的PT所在的工作表对应的Sheet Module中:

Option Explicit

Private Sub Worksheet_PivotTableUpdate(ByVal Target As PivotTable)
Dim sLastUndoStackItem As String
Dim sc_Pivot As SlicerCache
Dim sc_Table As SlicerCache
Dim si_Pivot As SlicerItem
Dim si_Table As SlicerItem

With Application
    .ScreenUpdating = False
    .Calculation = xlCalculationManual
End With

If Target.Name = "PivotTable1" Then '<= Change name as appropriate
    On Error Resume Next 'in case the undo stack has been wiped or doesn't exist
    sLastUndoStackItem = Application.CommandBars(14).FindControl(ID:=128).List(1) 'Standard Commandbar, undo stack
    'The above line doesn't seem to work in my version of O365 so we'll use the English language backup
    If sLastUndoStackItem = "" Then sLastUndoStackItem = Application.CommandBars("Standard").Controls("&Undo").List(1)
    On Error GoTo 0

    If sLastUndoStackItem = "Filter" Or sLastUndoStackItem = "Slicer Operation" Then

        Set sc_Pivot = ActiveWorkbook.SlicerCaches("Slicer_Data") '<= Change name as appropriate
        Set sc_Table = ActiveWorkbook.SlicerCaches("Slicer_Data1") '<= Change name as appropriate
        sc_Table.ClearAllFilters

        On Error Resume Next 'In case items differ between Table and PT
        For Each si_Pivot In sc_Pivot.SlicerItems
            With si_Pivot
                sc_Table.SlicerItems(.Name).Selected = .Selected
            End With
        Next si_Pivot
    End If
End If

With Application
    .ScreenUpdating = True
    .Calculation = xlCalculationAutomatic
End With

End Sub

这是我使用“Master”切片器之前的样子:

在此处输入图像描述

...这是我使用“Master”切片器后的样子:

在此处输入图像描述

请注意,过滤表格会隐藏整个工作表中的行。因此,您不想将任何想要始终保持可见的东西放在表格旁边。

于 2018-04-03T02:38:45.363 回答