【问题标题】:VBA create a version 10 pivot table in an xls file via Excel 2007VBA 通过 Excel 2007 在 xls 文件中创建版本 10 数据透视表
【发布时间】: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


    【解决方案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 中编写数据透视表时,您必须手动调整数据透视表的连接字符串,所以我认为这可能会导致您的问题。我看看能不能找到一个老例子。

    【讨论】:

    • 感谢您花时间研究我的问题。我已经编辑了我的问题以报告我对初始代码所做的一些更改以解决该问题,我认为它可能确实与您提到的内部/外部源问题有关。
    猜你喜欢
    • 2015-10-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-11-28
    • 1970-01-01
    相关资源
    最近更新 更多