VB.NET数据透视表更改数据源

时间:2012-08-28 23:09:43

标签: .net vb.net excel com

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

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

当我在VBA中使用宏录制器时,它工作正常并提供以下代码(注意我尝试使用命名范围,因此这里的“range1”指的是我感兴趣的区域。我尝试过没有命名区域以及):

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

这似乎与S.O.帖子有人建议。这是我最近尝试过的代码:

        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试图让我的这么辛苦。

任何帮助都会非常感激,并且一如既往地感谢S.O。

1 个答案:

答案 0 :(得分:1)

好的S.O.除了我引用原始工作簿数据透视表而不是复制的数据透视表(一个被称为表格而另一个被称为tblsheet,因此这是一个关注和更好变量命名的教训)之外,我把所有事都做对了。因此,如果您确保您的参考文献是正确的,那么上述代码应该像梦一样工作。为了那些仍然在VB.NET中自动化excel的人,我将把它留下来。