自动切片器在另一个 sheet 中隐藏和显示行

Automate Slicer to Hide and Show Rows in another sheet

我有一个带切片器的枢轴 table,我想 link 它根据切片器选择隐藏或显示某些行。我现在使用的代码可以做到这一点,但是当没有切片器选择时,我希望所有这些隐藏的行再次可见,这就是我坚持的部分。目前,当切片器中没有选择任何内容时,所有行都被隐藏,这与我想要的相反。请帮忙!

Option Explicit


Private Sub Worksheet_PivotTableUpdate(ByVal Target As PivotTable)

 Dim cell as Range

If Target.Name <> "PivotTable1" Then
Exit Sub
Else

    For Each cell In Sheet2.Range("A2:A25")
        If ActiveWorkbook.SlicerCaches("Slicer_Item").SlicerItems("Pen").Selected = True And cell.Value = "East" Then
            cell.EntireRow.Hidden = True
        ElseIf ActiveWorkbook.SlicerCaches("Slicer_Item").SlicerItems("Pencil").Selected = True And cell.Value = "Central" Then
            cell.EntireRow.Hidden = True
        ElseIf ActiveWorkbook.SlicerCaches("Slicer_Item").SlicerItems("Pen").Selected = True And cell.Value = "Central" Then
            cell.EntireRow.Hidden = False
        ElseIf ActiveWorkbook.SlicerCaches("Slicer_Item").SlicerItems("Pencil").Selected = True And cell.Value = "East" Then
            cell.EntireRow.Hidden = False
        ElseIf ActiveWorkbook.SlicerCaches("Slicer_Item").SlicerItems("Pen").Selected = False And ActiveWorkbook.SlicerCaches("Slicer_Item").SlicerItems("Pencil").Selected = False And cell.Value = "East" Then
            cell.EntireRow.Hidden = False
        End If

    Next
End If

结束子

试试,

Private Sub Worksheet_PivotTableUpdate(ByVal Target As PivotTable)
    Dim SLC As SlicerCache
    Dim Wb As Workbook
    Dim rngDB As Range, rng As Range
    Dim rngU(1 To 2) As Range
    
    If Target.Name <> "PivotTable1" Then Exit Sub

    Set Wb = ThisWorkbook
    Set SLC = Wb.SlicerCaches("Slicer_Item")

    Set rngDB = Sheet2.Range("a2:a25")
    For Each rng In rngDB
        If rng = "Central" Then
            If rngU(1) Is Nothing Then
                Set rngU(1) = rng
            Else
                Set rngU(1) = Union(rngU(1), rng)
            End If
        ElseIf rng = "East" Then
             If rngU(2) Is Nothing Then
                Set rngU(2) = rng
            Else
                Set rngU(2) = Union(rngU(2), rng)
            End If
        End If
    Next
    If SLC.SlicerItems("Pen").Selected = True And SLC.SlicerItems("Pencil").Selected = True Then
        rngU(1).EntireRow.Hidden = False
        rngU(2).EntireRow.Hidden = False
    ElseIf SLC.SlicerItems("Pen").Selected = True Then
        rngU(1).EntireRow.Hidden = True
        rngU(2).EntireRow.Hidden = False
    ElseIf SLC.SlicerItems("Pencil").Selected = True Then
        rngU(1).EntireRow.Hidden = False
        rngU(2).EntireRow.Hidden = True
    End If

End Sub