VB.NET透视表更改数据源

VB.NET透视表更改数据源,.net,vb.net,excel,com,.net,Vb.net,Excel,Com,我正在尝试编写一个程序,它获取一个包含透视表的文件和一个包含聚合信息的数据表,将这两个选项卡复制到一个新工作簿,从聚合信息中删除一些信息,然后使用新数据刷新透视表 我的一切都很好,除了在VB.NET中尝试通过编程更改pivot表的数据源时,我收到了大量COM异常未处理的错误。我的代码是根据S.O.邮报的 当我使用宏记录器在VBA中执行此操作时,它工作正常,并给出以下代码(注意,我尝试使用命名范围,因此这里的“range1”指的是我感兴趣的区域。我也尝试过不使用命名范围): 这似乎与《S.O.邮报

我正在尝试编写一个程序,它获取一个包含透视表的文件和一个包含聚合信息的数据表,将这两个选项卡复制到一个新工作簿,从聚合信息中删除一些信息,然后使用新数据刷新透视表

我的一切都很好,除了在VB.NET中尝试通过编程更改pivot表的数据源时,我收到了大量COM异常未处理的错误。我的代码是根据S.O.邮报的

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

这似乎与《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(Object)方法只能与使用工作表上存储的数据作为数据源的数据透视表一起使用。如果将ChangePivotCache(Object)方法用于连接到外部数据源的数据透视表,则会发生运行时错误

因此,我想知道的是,我的新工作簿与原始工作簿有链接这一事实是否是问题的一部分。我已经尝试通过编程和手动删除链接,但它当然不会消失

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


任何帮助都将不胜感激,一如既往,感谢大量的S.O.

嗯,S.O.我一切正常,只是引用了原始工作簿数据透视表,而不是复制的数据透视表(一个称为表表表,另一个称为tblsheet,这是一堂注意和更好地命名变量的课)。因此,如果您确保您的引用是正确的,那么上面的代码应该像做梦一样工作。为了那些仍然在VB.NET中实现excel自动化的人,我将不再讨论这个问题

        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"))