代码之家  ›  专栏  ›  技术社区  ›  Chronocidal

透视表源不会更改VBA中的工作簿?

  •  0
  • Chronocidal  · 技术社区  · 6 年前

    前提是:

    我有一个工作簿,里面有数据。其中一个选项卡在a-D列中有一个数据列表,在F3单元中有一个基于该列表的透视表。工作簿中的一个宏将 Copy 将该工作表(以及其他一些与问题无关的工作表)添加到新的工作簿中 ThisWorkbook.Worksheets(aTMP).Copy After:=wkb.Worksheets(wkb.Worksheets.Count) ,在哪里 aTMP 是包含工作表名称的数组。

    不幸的是,这会使新工作簿中的数据透视表指向原始工作表/工作簿中的表- .PivotCache.SourceData 指向正确的文件-这很容易”。天哪,我错了。。。

    (包括 Debug.Print 我自己解决这个问题时添加的语句)

    Debug.Print wkb.Worksheets(wsTableAndPivot.Name).PivotTables(1).PivotCache.SourceData
        'This is "'Z:\FilePath\[WorkbookName]Calculate_PivotTable'!C1:C4"
    Debug.Print wkb.Worksheets(wsTableAndPivot.Name).Columns("A:D").Address(True, True, xlR1C1, True)
        'This is "[Book1]Calculate_PivotTable!C1:C4"
    Debug.Print wkb.Worksheets(wsTableAndPivot.Name).PivotTables(1).PivotCache.SourceType
        ' This is 1
    ''''
    wkb.Worksheets(wsTableAndPivot.Name).PivotTables(1).PivotCache.SourceData = _
        wkb.Worksheets(wsTableAndPivot.Name).Columns("A:D").Address(True, True, xlR1C1, True)
        'This is the line that throws an error
    ''''
    Debug.Print "-----"
        'The following values are after I MANUALLY intervene, as detailed in "The Error"
    Debug.Print wkb.Worksheets(wsTableAndPivot.Name).PivotTables(1).PivotCache.SourceData
        'This is "Calculate_PivotTable'!C1:C4"
    Debug.Print wkb.Worksheets(wsTableAndPivot.Name).PivotTables(1).PivotCache.SourceType
        ' This is 1
    

    错误:

    错误号-1004
    应用程序定义或对象定义错误

    然而 手动 A1:D2 然后

    (注意:据我所知,受保护的工作表可能会导致数据透视表出现问题,我已经检查过没有任何问题)

    1 回复  |  直到 6 年前
        1
  •  1
  •   FreeMan    6 年前

    我遇到了一个类似的问题,并发布了关于它在这里,所以。

    你可以看看 solution 我想出了为你工作的方法。

    实际上,我从工作表上的数据为每个透视表创建了一个新的透视缓存。可能不是最理想的,但这是我发现唯一有效的方法。