我有一个使用数据验证的单元格。当用户在该单元格中选择一个新值时,我需要刷新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
答案 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