【问题标题】:VBA Data missing on the copied Pivot Table复制的数据透视表上缺少 VBA 数据
【发布时间】:2017-06-05 04:37:48
【问题描述】:

我正在用 Excel 编写我的 VBA 代码。第一个数据透视表由 VBA 生成并且运行良好。但是,我需要更多基于具有不同行或列项的相同数据源的数据透视表。我试图将第一个数据透视表复制到单元格 L8,但是粘贴后,新数据透视表中的数据消失了。当我手动刷新数据透视表时,数据再次出现。这是我的代码 -

wsPvtTbl.PivotTables("PivotTable1").TableRange2.Copy Destination:=wsPvtTbl.Range("L8")

这是第二个数据透视表的屏幕截图

有办法解决吗?谢谢。

*****更新*****

我厌倦了使用附加到不同按钮的以下代码来刷新数据透视表,它起作用了。我以为它会在同一个 sub 中工作,但我不确定为什么它只能单独工作?

ThisWorkbook.refreshall

【问题讨论】:

  • 虽然这不应该是这种情况,但在复制数据透视表后使用 ThisWorkbook.RefreshAll 作为下一行。
  • @sktneer 谢谢。我添加了 ActiveWorkbook.RefreshAll 但是表格仍然保持不变。有任何想法吗?谢谢
  • 粘贴后尝试清除新数据透视表的过滤器,即:wsPvtTbl.PivotTables("PivotTable2").ClearAllFilters
  • @RADO 谢谢。我把你的代码放进去后出现错误——“应用程序定义的或对象定义的错误”
  • 我使用了一个虚构的名称“PivotTable2”。您需要将其替换为在“L8”中创建的新数据透视表的名称。

标签: vba excel


【解决方案1】:

也许你可以试试这样的……

Sub CopyPivotTable()
Dim wsPvtTbl As Worksheet
Dim pt As PivotTable
Dim pf As PivotField

Set wsPvtTbl = ActiveSheet

wsPvtTbl.PivotTables("PivotTable1").TableRange2.Copy Destination:=wsPvtTbl.Range("L8")

For Each pt In wsPvtTbl.PivotTables
    If pt.Name <> "PivotTable1" Then            
        For Each pf In pt.PivotFields
            pf.ClearAllFilters
        Next pf
    End If
Next pt
End Sub

【讨论】:

  • 嗨@sktneer 我刚刚注意到,如果我逐行运行代码 (F8),新的数据透视表将正确显示。但是,当我按 F5 或单击附加的按钮时,表格将丢失数字。有什么建议吗?谢谢
  • 我测试了它,它对我有用。不知道最后发生了什么。
  • 我在另一个宏中添加了“ThisWorkbook.refreshall”,它起作用了。但是,当我将它放入原始子中时,它就不再起作用了。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-06-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多