3

我需要通过在装有 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 强调的外部源问题有关。

4

1 回答 1

1

我认为实际的源连接不兼容——如果您使用 xldatabase 作为源,它可以正常工作:

Set pc = ActiveWorkbook.PivotCaches.Create(SourceType:=xlDatabase, SourceData:="Sheet5!R1C1:R2C3", Version:=xlPivotTableVersion10)

Set pt = pc.CreatePivotTable(Sheet7.[A1], "testpivot1", , xlPivotTableVersion10)

我知道当我在 Excel 2003 中编写数据透视表时,您必须手动调整数据透视表的连接字符串,所以我认为这可能会导致您的问题。我看看能不能找到一个老例子。

于 2013-03-12T14:45:47.910 回答