VBA通过Excel 2007在xls文件中创建版本10数据透视表

时间:2013-02-25 16:30:48

标签: vba excel-2007 excel-2003 pivot-table

我需要通过我在我的计算机上运行的宏创建xlPivotTableVersion10数据透视表(Excel 2003兼容),该计算机上有Excel 2007。 我从源文件运行宏。我有另一个文件(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数据透视表。这让我觉得我想做的事情是可能的,我似乎无法正确编码......

如果有人提示如何在xls文件中创建Excel 2003透视表,但是通过Excel 2007应用程序和VBA,我将非常感谢您的知识共享。

此致 学家

--------------编辑(遵循Karter的评论)

确实,我的数据透视表使用外部源似乎存在问题。经过一番搜索和测试后,我想出了以下工作:

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

之前我首先添加一个只有“DATA RELATIVE TO MY CONNECTION ...”信息的连接,而没有.CommandType,.CommandText等参数。

我对连接参数不是很熟悉,但我想这个技巧与Karter强调的外部源问题有关。

1 个答案:

答案 0 :(得分: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中编码数据透视表时,您必须手动调整数据透视表的连接字符串,所以我认为这可能会导致您的问题。我会看看能否找到一个旧例子。