我需要通过在装有 Excel 2007 的计算机上运行的宏来创建 xlPivotTableVersion10 数据透视表(与 Excel 2003 兼容)。我从源文件运行宏。我有另一个文件 (WkbVar),它是 .xls,并以 [兼容模式] 打开,我想在其中创建几个数据透视表。我设法创建了与我的外部 Access 数据库(DOH 位置清单 V6)的连接,我从中获取我的数据源以及具有此连接的数据透视缓存(pc)。
Set pc = WkbVar.PivotCaches.Create(SourceType:=xlExternal,
SourceData:=WkbVar.Connections("DOH Location inventory V6") _
, Version:=xlPivotTableVersion10)
With pc
.CreatePivotTable TableDestination:=WksAlertesVar.Range("A9"),TableName:="PivotTable_0", _
DefaultVersion:=xlPivotTableVersion10
End With
数据透视缓存似乎创建得很好,但随后我在“.CreatePivotTable [...] DefaultVersion:=xlPivotTableVersion10”行收到类型 1004“对象定义的应用程序定义”错误。
我尝试了几种变体,这里是我得到的回顾:
数据透视缓存版本:=xlPivotTableversion10 +数据透视表DefaultVersion:=xlPivotTableversion10 => 1004 错误
数据透视缓存版本:=xlPivotTableversion10 +数据透视表DefaultVersion:=xlPivotTableversion12 => 1004 错误
数据透视缓存版本:=xlPivotTableversion12 +数据透视表DefaultVersion:=xlPivotTableversion10 => 5 错误“无效的过程调用”
数据透视缓存版本:=xlPivotTableversion12 +数据透视表DefaultVersion:=xlPivotTableversion12 => 工作正常,但它会创建一个 Excel 2007 数据透视表,它与 xls 文件中的过滤器和刷新不兼容。
如果我在创建连接后停止宏并在 [兼容模式] 下手动创建数据透视表,它会按预期工作:我得到一个 Excel 2003 数据透视表。这让我觉得我正在尝试做的事情是可能的,我似乎无法正确编码......
如果有人对如何通过 Excel 2007 应用程序和 VBA 在 xls 文件中创建 Excel 2003 数据透视表有任何提示,我将非常感谢您的知识分享。
真诚的,J。
-------------- 编辑(按照卡特的评论)
确实,为我的数据透视表使用外部源似乎存在问题。经过更多的搜索和测试,我想出了以下解决方法:
With ActiveWorkbook.PivotCaches.Create(SourceType:=xlExternal, Version:=xlPivotTableVersion10)
.Connection = Array( )'HERE GOES ALL THE DATA RELATIVE TO MY CONNECTION TO THE ACCESS DATABASE
.CommandType = xlCmdTable
.CommandText = Array( _ 'here is the SQL string to select some data from a specific table I have in my Access database
"SELECT *" & Chr(13) & "" & Chr(10) & "FROM [DOH historique avec libelles] WHERE [DOH historique avec libelles]![Numero Site Gestionnaire] = " & NoSite _
)
.MaintainConnection = False
.CreatePivotTable TableDestination:=ActiveWorksheet.Range("A9"), TableName:="PivotTable_0", DefaultVersion:=xlPivotTableVersion10
End With
在我首先添加一个仅包含“与我的连接相关的数据...”信息且没有 .CommandType、.CommandText 等参数的连接之前。
我对连接参数不是很熟悉,但我猜这个技巧与 Karter 强调的外部源问题有关。