【发布时间】:2015-03-23 20:14:54
【问题描述】:
在 Excel 2010 中,我通过 VBA 代码将工作表从主工作簿复制到新工作簿,以便每个新工作簿都可以包含一组用于不同客户端的数据。
一些工作表具有从 Access 数据库中提取的数据表,以及基于该数据集的数据透视表。我的代码将工作表从主工作簿复制到新的客户端工作簿,更新工作表上的数据,然后更新 .PivotCache.SourceData 以指向新工作簿。
此代码在更新.PivotCache.SourceData 时运行良好:
If XLClinic.PivotCaches.Count <> PivotCacheCount Then
Formula = NewSheet.PivotTables(1).PivotCache.SourceData
If InStr(1, Formula, "'") > 0 Then
Bracket = InStr(1, Formula, "]")
Formula = Replace(Formula, "'", "")
NewSheet.PivotTables(1).PivotCache.SourceData = Right(Formula, _
Len(Formula) - Bracket + 1)
End If
End If
然后我更改了我的“主”工作表布局,因此我实际上将其定义为table,而不是只是工作表上的一些数据,并且我手动更新了数据透视表以指向表名称(我将表名称更改为与数据集一致且相关的名称,而不仅仅是TableX)。
此代码不再用于更改数据透视表的 .SourceData。当我尝试执行它时,我得到:
运行时错误“1004”:
应用程序定义或对象定义的错误
当数据被简单地格式化为一堆单元格时,.SourceData 值如下所示:
'\\server\share\完整路径[工作簿名称]工作表名称'!$A$4:$E$240
当我将数据格式更改为表格时,.SourceData 现在看起来像这样:
'\\server\share\full path\Workbook Name`!TableName
考虑到结构上的这种变化,我将代码更改为:
If XLClinic.PivotCaches.Count <> PivotCacheCount Then
Formula = NewSheet.PivotTables(1).PivotCache.SourceData
If InStr(1, Formula, "'") > 0 Then
Bracket = InStr(1, Formula, "!")
NewSheet.PivotTables(1).PivotCache.SourceData = Right(Formula, Len(Formula) - Bracket)
End If
End If
不幸的是,我仍然收到Run-time error'1004'。
我已确认目标工作簿中的表与原始表具有相同的名称,它没有使用通用名称重命名(这就是我在我的 Master 上强制使用特定名称/表的原因)。
【问题讨论】: