2015-07-06 89 views
1

我试图自动尝试在Excel中更改数据透视表的“数据源”。我尝试了大部分(如果不是所有Google/Stack Overflow上可用的解决方案)。但是我不断遇到以下错误。使用VBA更改数据透视表数据源

Run-time error '5': 
Invalid procedure call or argument 

这是我运行失败的代码。

Sub UpdateResourcePivots() 
Dim pivotDataSheet As Worksheet 
Dim dataSheet As Worksheet 
Dim pivotLocation As String 
Dim pivotDesignation As String 
Dim startPoint As Range 
Dim endPoint As Range 
Dim dataRange As Range 
Dim newRange As String 
Dim lastRow As Integer 

Dim newPivotCache As PivotCache 

Set pivotDataSheet = ThisWorkbook.Worksheets("PivotData") 
Set dataSheet = ThisWorkbook.Worksheets("Team Information") 

pivotLocation = "pvtResourceLocation" 
pivotDesignation = "pvtResourceDesignation" 'Dont worry about this one for now 

Set startPoint = dataSheet.Range("A5") 
lastRow = dataSheet.Range("A" & dataSheet.Rows.count).End(xlUp).row 
Set endPoint = dataSheet.Range("O" & lastRow) 
Set dataRange = dataSheet.Range(startPoint, endPoint) 

newRange = "'" & dataSheet.name & "'!" & dataRange.Address(RowAbsolute:=True, ColumnAbsolute:=True, ReferenceStyle:=xlR1C1, External:=True) 
' newRange = "'" & dataSheet.name & "'!" & dataRange.Address(ReferenceStyle:=xlR1C1) ' Tried this as well 

Set newPivotCache = ThisWorkbook.PivotCaches.Create(SourceType:=xlDatabase, SourceData:=newRange, Version:=xlPivotTableVersion10) 

With pivotDataSheet 
    .PivotTables(pivotLocation).ChangePivotCache newPivotCache 'Error thrown here. 

End With 
End Sub 

将引发错误的下面一行:

.PivotTables(pivotLocation).ChangePivotCache newPivotCache 

其他一些信息

我使用的MS Office 2010(行货)。 我有一个数据源(一个有20行和8列的小表;行会增长,因此宏)。在另一张纸上创建了两个数据透视表。在第三张纸上,我使用Slicers过滤数据(仪表板)。

回答

1

更改代码,以便您创建缓存,你把它分配给数据透视表:

With pivotDataSheet 
    .PivotTables(pivotLocation).ChangePivotCache ThisWorkbook.PivotCaches.Create(SourceType:=xlDatabase, SourceData:=dataRange.Address(Referencestyle:=xlR1C1), Version:=xlPivotTableVersion10) 
+0

我已经接受了这个作为一个答案,因为我正在努力简化代码,我也纳入你的建议,它的工作。 但是我不认为这是唯一的答案,因为我使用上面的代码(因为这是互联网上最推荐的代码),它一直让我失望。我想我已经过了复杂的范围。无论如何感谢帮助@Rory –