【发布时间】:2018-10-16 12:17:34
【问题描述】:
好的,这已经困扰我几天了。希望有人能在某个地方发现一个愚蠢的错误?
前提:
我有一个工作簿,其中包含数据。其中一个选项卡在 A-D 列中有一个数据列表,以及一个基于单元格 F3 中的数据的数据透视表。工作簿中的一个宏将 Copy 该工作表(以及与问题无关的其他几个)添加到具有 ThisWorkbook.Worksheets(aTMP).Copy After:=wkb.Worksheets(wkb.Worksheets.Count) 的新工作簿,其中 aTMP 是一个包含工作表名称的数组。
不幸的是,这使得新工作簿中的数据透视表指向原始工作表/工作簿中的表 - 不是新的。 “没问题!”,我想。 “我将更改 .PivotCache.SourceData 以指向正确的文件 - 这很容易”。男孩是我错了...
代码:
(包括我在尝试自己解决此问题时添加的Debug.Print 语句)
Debug.Print wkb.Worksheets(wsTableAndPivot.Name).PivotTables(1).PivotCache.SourceData
'This is "'Z:\FilePath\[WorkbookName]Calculate_PivotTable'!C1:C4"
Debug.Print wkb.Worksheets(wsTableAndPivot.Name).Columns("A:D").Address(True, True, xlR1C1, True)
'This is "[Book1]Calculate_PivotTable!C1:C4"
Debug.Print wkb.Worksheets(wsTableAndPivot.Name).PivotTables(1).PivotCache.SourceType
' This is 1
''''
wkb.Worksheets(wsTableAndPivot.Name).PivotTables(1).PivotCache.SourceData = _
wkb.Worksheets(wsTableAndPivot.Name).Columns("A:D").Address(True, True, xlR1C1, True)
'This is the line that throws an error
''''
Debug.Print "-----"
'The following values are after I MANUALLY intervene, as detailed in "The Error"
Debug.Print wkb.Worksheets(wsTableAndPivot.Name).PivotTables(1).PivotCache.SourceData
'This is "Calculate_PivotTable'!C1:C4"
Debug.Print wkb.Worksheets(wsTableAndPivot.Name).PivotTables(1).PivotCache.SourceType
' This is 1
错误:
如果我只是运行代码,我会得到这个相当无益的错误:
错误号 -1004
应用程序定义或对象定义的错误
但是,如果我在引发错误的行上放置一个断点,手动将源数据更改为指向同一个工作簿(例如 Range A1:D2 ),然后然后运行该行,它可以正常工作并将源数据设置为整个列。
(注意,据我所知,受保护的工作表可能会导致数据透视表出现问题,我已经检查过没有任何问题)
【问题讨论】:
-
@FreeMan 创建一个新的 PivotCache 似乎已经成功了 - 我猜有某种基于原始工作簿的引用或锁定。非常感谢!
标签: excel vba pivot-table