单元格值更改时刷新特定数据透视表

时间:2015-10-02 18:52:39

标签: excel vba excel-vba

我有一个使用数据验证的单元格。当用户在该单元格中选择一个新值时,我需要刷新2个特定的数据透视表,而不是全部。这是我的代码:

<target name="pb">
<exec executable="mstest">
<arg value="/TestContainer:C:\VS2012\myApp\UnitTestApp\bin\Debug\UnitTestApp.dll"/>
<arg value ="/resultsfile:C:\VS2012\testResults3.trx"/>
<arg value ="/category:MyTest"/>
</exec>

当我编译它时,我没有得到错误,但是当我更改目标单元格时,数据透视表不会刷新。现在这是作为一般模块编写的,但我也尝试在特定工作表下找到目标(我不知道这是否有所作为,但我想我会提到它)。我哪里错了?

升级代码:

Sub Update_Pivots(ByVal Target As Range)
If Target.Address = Worksheets("Expense by Individual").Range("A3") Then
   Worksheets("Expense by Individual").PivotTables("PivotTable2").PivotCache.Refresh
   Worksheets("Expense Pivot").PivotTables("PivotTable3").PivotCache.Refresh
End If
End Sub

2 个答案:

答案 0 :(得分:1)

您忘记了比较的结束.Address并直接刷新了PT:

If Target.Address = Worksheets("Expense by Individual").Range("A3").Address Then
   Worksheets("Expense by Individual").PivotTables("PivotTable2").RefreshTable
   Worksheets("Expense Pivot").PivotTables("PivotTable3").RefreshTable
End If

<强>更新

试试这个:

Sub Worksheet_Change(ByVal Target As Range)
    Stop
    If Target.Address = Worksheets("Expense by Individual").Range("A3").Address Then
        PivotTables("PivotTable2").RefreshTable
        Worksheets("Expense Pivot").PivotTables("PivotTable3").RefreshTable
    End If
End Sub

答案 1 :(得分:-1)

我最终需要改变数据透视表片段的语言。正如A.S.H建议的那样,我将它用作代码模块,并删除了对Excel工作表的所有引用,正如Excel Hero所提到的那样。以下是正常运行的代码:

Sub Worksheet_Change(ByVal Target As Range)
Dim KeyCells As Range
Dim pt As PivotTable
Set KeyCells = Range("A2:A3")
If Not Application.Intersect(KeyCells, Range(Target.Address)) Is Nothing Then
    For Each pt In ActiveSheet.PivotTables
        Select Case pt.Name
            Case "PivotTable3", "PivotTable2"
                pt.RefreshTable
            Case Else
        End Select
        Next pt
End If
End Sub