我有以下代码在某些时候起作用,但现在在“.SourceData = rng.Address(True,True,xlR1C1,True)”中抛出错误“
HoldingId
你能否告诉我我做错了什么。我只是想将现有数据透视表中的一个源更改为新工作表,在这种情况下,这将是一个活动工作表。感谢
答案 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