0

我正在尝试编写一个程序,该程序获取带有数据透视表的文件和带有汇总信息的数据表,将这两个选项卡复制到新工作簿中,从汇总信息中删除一些信息,然后刷新数据透视表新数据。

我的一切工作都很好,除了当我尝试以编程方式更改 VB.NET 中数据透视表的数据源时,我得到一大堆 COM 异常未处理错误。我的代码基于SO 帖子。

当我使用宏记录器在 VBA 中执行此操作时,它工作正常并给出以下代码(注意我尝试使用命名范围,所以这里的“range1”指的是我感兴趣的区域。我也尝试过没有命名范围) :

    ActiveSheet.PivotTables("PivotTable3").ChangePivotCache ActiveWorkbook. _
    PivotCaches.Create(SourceType:=xlDatabase, SourceData:="Range1", Version _
    :=xlPivotTableVersion12)

这似乎与 SO 帖子的建议非常吻合。这是我最近尝试过的代码:

        Dim pivotTbl As Excel.PivotTable = tableSheet.PivotTables("PivotTable3")

        Dim holdRows As Integer = hold.UsedRange.Rows.Count
        Dim holdCols As Integer = hold.UsedRange.Columns.Count

        Dim pvtRng As Excel.Range = hold.Range("a1", hold.Range("a1").Offset(holdRows - 1, holdCols - 1))

        savebook.Names.Add(Name:="Range1", RefersTo:=pvtRng)
        pivotTbl.ChangePivotCache(savebook.PivotCaches.Create(SourceType:=Excel.XlPivotTableSourceType.xlDatabase, SourceData:="Range1"))

我已经为我的数据透视表源类型尝试了外部、数据库和合并,以及使用命名范围、无命名范围、在 SourceData 中定义范围等。

现在我知道,如果有疑问,最好花一些时间在 MSDN 上,我遇到了ChangePivotCache页面,上面写着:

ChangePivotCache(Object) 方法只能与使用存储在工作表上的数据作为其数据源的数据透视表一起使用。如果将 ChangePivotCache(Object) 方法与连接到外部数据源的数据透视表一起使用,则会发生运行时错误。

所以我想知道的是,我的新工作簿具有指向原始工作簿的链接这一事实是否是问题的一部分。我已经开始尝试以编程方式和手动删除链接,但当然它并没有消失。

最令人沮丧的部分是我从宏记录器发布的 VBA 代码工作得很好而且很直观,所以我有点不明白为什么 VB.NET 试图让我的一天如此艰难.

任何帮助将不胜感激,一如既往,非常感谢

4

1 回答 1

1

好吧,所以除了引用原始工作簿数据透视表而不是复制的数据透视表(一个称为 tablesheet,另一个称为 tblsheet,因此我得到了所有注意和更好的变量命名方面的教训)。所以如果你确定你的引用是正确的,上面的代码应该像梦一样工作。为了那些还在 VB.NET 中自动化 excel 的人,我将把它搁置一旁。

于 2012-08-30T15:41:08.697 回答