更改数据透视表的来源

时间:2018-03-14 10:43:45

标签: vba excel-vba excel

我有以下代码在某些时候起作用,但现在在“.SourceData = rng.Address(True,True,xlR1C1,True)”中抛出错误“

HoldingId

你能否告诉我我做错了什么。我只是想将现有数据透视表中的一个源更改为新工作表,在这种情况下,这将是一个活动工作表。感谢

2 个答案:

答案 0 :(得分:1)

为了包含工作表的Range.Address名称,第4个参数必须为xlExternal

请参阅以下修改后的代码:

Dim shTotalsPivot As Worksheet
Dim Rng As Range
Dim RngString As String
Dim PvtTbl As PivotTable

Set Rng = ActiveSheet.Range("A1:F" & LastRow)

' put the full range address (including sheet name) in a String variable
RngString = Rng.Address(False, False, xlA1, xlExternal)

Set shTotalsPivot = ActiveWorkbook.Sheets("Totals Pivot")

'set the Pivot-Table object
Set PvtTbl = shTotalsPivot.PivotTables(1)

' === for DEBUG ONLY ===
Debug.Pring RngString

' update the Pivot-Cache
With PvtTbl.PivotCache
   .SourceData = RngString
   .Refresh
End With   

答案 1 :(得分:0)

看看这是否有效。源必须是字符串并包含工作表名称,并且您指的是预先存在的PT,因此使用ChangePivotCache。

shTotalsPivot.PivotTables(1).ChangePivotCache _
    ThisWorkbook.PivotCaches.Create( _
    SourceType:=xlDatabase, _
    SourceData:=ActiveSheet.Name & "!" & rng.Address(True, True, xlR1C1, True))
shTotalsPivot.PivotTables(1).refresh