【发布时间】:2013-02-10 20:57:13
【问题描述】:
我需要通过我在装有 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 强调的外部源问题有关。
【问题讨论】:
标签: vba excel-2007 excel-2003 pivot-table