我有一个电子表格,可以生成数据库查询的摘要作为数据透视图。此数据库查询由第三方编写并且运行良好,除了它删除工作表中的所有内容并重写同一工作表中的所有数据。为了解决这个问题,我编写了一个宏来重新安排数据,然后更新数据透视表的缓存。我希望数据透视表本身能够持久化,因为数据透视表的过滤器和参数在更新之间不会发生变化。
这是我为完成此任务而编写的代码:
Dim wb As Workbook
Dim sh As Worksheet
Dim sht As Worksheet
Dim pvtCache As PivotCache
Dim pvt As PivotTable
Dim SrcData As String
Set wb = ThisWorkbook
Set sh = wb.Sheets("Data")
'Find Last Row of Data
Lastrow = sh.Range("D" & Rows.Count).End(xlUp).Row
' STEP 2 - Update Pivot Tables
' Set Source Data
SrcData = sh.Name & "!" & sh.Range("$A1:$CS" & Lastrow).Address(ReferenceStyle:=xlR1C1)
Set pvtCache = wb.PivotCaches.Create(SourceType:=xlDatabase, SourceData:=SrcData, Version:=xlPivotTableVersion15)
' Change Pivot Cache to current Range and Refresh for all Pivot tables in Sheet
For Each sht In wb.Worksheets
For Each pvt In sht.PivotTables
' ERROR 438 - Object Doesn't support Property or method
pvt.ChangePivotCache (pvtCache)
'sht.PivotTables(pvt).ChangePivotCache (pvtCache) ' Attempt 2
'sht.PivotTables(pvt).ChangePivotCache (wb.PivotCaches.Create(SourceType:=xlDatabase, SourceData:=SrcData, Version:=xlPivotTableVersion15)) ' Attempt 2 - Longhand pvtCache
' ERROR 1004 - Method 'PivotTables' of object '_Worksheet' failed
pvt.PivotCache.Refresh
Next pvt
Next sht
错误发生在该行:
pvt.ChangePivotCache (pvtCache)
我发现的每个引用都说这应该是更改数据透视缓存的合法方式,但它给了我一个错误438 - 对象不支持属性或方法"每次。我还尝试使用此代码在循环外执行此操作:
' Update WeekStops
Set sht = wb.Sheets("Stops by Week")
sht.PivotTables("WeekStops").ChangePivotCache (wb.PivotCaches.Create(SourceType:=xlDatabase, SourceData:=SrcData, Version:=xlPivotTableVersion15))
sht.PivotTables("WeekStops").PivotCache.Refresh
在ChangePivotCache命令上仍然会出现错误438。
是否与下一行发生的错误1004有关
pvt.PivotCache.Refresh
当我注释掉上面的那一行时?
谢谢和最诚挚的问候,
约翰
答案 0 :(得分:1)
问题在于创建了ChangePvtCache命令外部的pvtCache,以及在ChangePivotCache中使用括号。
工作代码如下:
pvt.ChangePivotCache wb.PivotCaches.Create(SourceType:=xlDatabase, SourceData:=SrcData, Version:=xlPivotTableVersion15)
感谢大家的帮助。