【问题标题】:Run-Time Error 1004 - Macro to update pivot table运行时错误 1004 - 更新数据透视表的宏
【发布时间】:2018-11-19 02:19:01
【问题描述】:

我正在尝试使用宏更新数据透视表,因为每个月都会将数据添加到表的底部(更新以将数据包含到最后一行)。

Option Explicit

Sub Pivot()

Dim shConD As Worksheet
Dim shPvtTbl As Worksheet
Dim lr As Long
Dim rng As Range

Set shConD = ActiveWorkbook.Sheets("Consolidated_Data")
Set shPvtTbl = ActiveWorkbook.Sheets("PivotTables")

lr = shConD.Range("A" & Rows.Count).End(xlUp).Row
Set rng = shConD.Range("A1:F" & lr)

With shPvtTbl.PivotTables(3).PivotCache
     .SourceData = rng.Address(True, True, xlR1C1, True) 'Error appears here
     .Refresh
End With

End Sub

.SourceData 行,我收到运行时错误 1004、应用程序定义或对象定义错误。遵循此 thread 和后续 chat 的逻辑。在此先感谢各位。

【问题讨论】:

  • 你真的需要vba代码吗?如果数据源始终相同,您可以只记录刷新宏并将其设置为按钮。

标签: vba excel pivot-table


【解决方案1】:

如果您使用 Excel 2007 或更高版本,那么完成此操作的最简单方法是确保您的数据透视表源数据是 Excel 表(又名 ListObject),并使用更改数据透视表数据源中的表名称,如图所示下面。

多亏了表格的魔力,从那时起,每当您向表格添加新数据时,表格都会自动展开。每当您刷新数据透视表时,它总是会自动获取新数据。无需再更改数据透视表数据源。

【讨论】:

  • 这么多年的excel...不知道这个基本概念。谢谢百万好友!
【解决方案2】:

试试下面的代码(代码的 cmets 中的解释):

Option Explicit

Sub Pivot()

Dim shConD As Worksheet
Dim shPvtTbl As Worksheet
Dim lr As Long
Dim rng As Range

' Added PivotTable variables
Dim PvtTbl As PivotTable
Dim PvtCache As PivotCache

Set shConD = ActiveWorkbook.Sheets("Consolidated_Data")
Set shPvtTbl = ActiveWorkbook.Sheets("PivotTables")

lr = shConD.Range("A" & shConD.Rows.Count).End(xlUp).Row
Set rng = shConD.Range("A1:F" & lr)

' set/update the PivotCache (with latest rng modifications
Set PvtCache = ActiveWorkbook.PivotCaches.Create(SourceType:=xlDatabase, SourceData:=rng.Address(False, False, xlA1, xlExternal))
' for DEBUG Only
Debug.Print PvtCache.SourceData

' set the PivotTable object
Set PvtTbl = shPvtTbl.PivotTables(3)
' for DEBUG Only
Debug.Print PvtTbl.Name

' refresh the PivotTable with the updated PivotCache
PvtTbl.ChangePivotCache PvtCache
PvtTbl.RefreshTable

End Sub

【讨论】:

  • 在倒数第二行 PvtTbl.ChangePivotCache PvtCache ,出现以下错误:运行时错误 5 - 无效的过程调用或参数。感谢您的帮助。
  • @KoderM16 你确定你有 3 个PivotTables 吗?这段代码对我有用,试试代码(我添加了一个Debug 部分)
  • 是的,我有 3 个。我尝试了 1 到 10 的数字,但没有运气。完全相同的错误。数据透视表被过滤,因为我在单独的工作表上创建了一个仪表板,其中包含图表。这会导致问题吗?
  • @KoderM16 不,这无关。运行 mycode 时,您在即时窗口中获得了哪些值? (你看到编辑了吗)?
  • 抱歉,我确实使用了编辑后的代码。它与 PivotTable3 一起返回
猜你喜欢
  • 2016-04-03
  • 1970-01-01
  • 1970-01-01
  • 2013-07-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多