首页 > 解决方案 > 在通过切片器更改数据透视表之前运行代码

问题描述

我什至不确定这是否可能。

所以我有以下内容Worksheet_ChangeWorksheet Calculate每次都会格式化我的工作表(如果需要,隐藏行和格式化日期)我在我创建的切片器中选择一个数据透视表过滤器项目。现在我希望添加的另一个功能是在数据透视表区域旁边和之外的相邻列中放置一个“评论”列。这些“评论”将与枢轴数据一起作为值复制并粘贴到另一张工作表中。同样,数据透视表也只会被复制和粘贴为值。

通常会发生的情况是,当在切片器中选择过滤器项目时,数据透视表区域的列数会发生变化,因为值字段是动态的。所以它可能是一个过滤器项目上的一列,而另一个是八列。这意味着我不能在右侧数据透视表的最后一列旁边放置“评论”列,因为它可能最终被新的过滤报告覆盖。所以是的,在覆盖发生之前,我希望先将评论列复制到另一个工作表。

任何帮助将不胜感激。提前致谢!

Private Sub Worksheet_Change(ByVal Target As Range)


If Not Intersect(Target, Range("b1:p7")) Is Nothing Then




'Unhide all rows first

    Range("A4").Select
    ActiveCell.Offset(0, 0).Range("A1:A1000").Select
    Range(Selection, Selection.End(xlDown)).Select
    Selection.EntireRow.Hidden = False

'Hide rows outside Pivot Table report area
    Range("A7").Select
    Selection.End(xlDown).Select
    ActiveCell.Offset(3, 0).Range("A1").Select
    Range(Selection, Selection.End(xlDown)).Select
    Selection.EntireRow.Hidden = True


    Range("A800").Select 'above project no.
    Selection.End(xlDown).Select
    ActiveCell.Offset(3, 0).Range("A1").Select
    Range(Selection, Selection.End(xlDown)).Select
    Selection.EntireRow.Hidden = True


'format date
        If Range("G7") = "End dates Due" Then
        Range("G7").Select
        ActiveCell.Range("A1:A792").Select
        Selection.NumberFormat = "m/d/yyyy"
    Else
        Range("G7").Select
        ActiveCell.Range("A1:A792").Select
        Selection.NumberFormat = "#,##0.00"
    End If






End If


End Sub

Private Sub Worksheet_Calculate()
    If Me.Range("A802").Value = "" Then 'below project no.
        Me.Range("A796:A801").EntireRow.Hidden = True 'from proj manager to project no.
    Else
        Me.Range("A796:A801").EntireRow.Hidden = False
    End If
    If Me.Range("A823").Value = "" Then 'below project no.
        Me.Range("A817:A822").EntireRow.Hidden = True
    Else
        Me.Range("A817:A822").EntireRow.Hidden = False
    End If
    If Me.Range("A802").Value = "" And _
                     Me.Range("A823").Value = "" Then
        Me.Range("A794:A822").EntireRow.Hidden = True 'from report no. to 2nd proj. no.
    End If
End Sub

标签: excelvbapivot-table

解决方案


推荐阅读