【问题标题】:Copy PivotTable range from one worksheet to another worksheet. Code is copying active sheet data instead将数据透视表范围从一个工作表复制到另一个工作表。代码正在复制活动工作表数据
【发布时间】:2021-06-23 15:19:45
【问题描述】:

我在工作表 (inventorySheet) 上有一个数据透视表,我想复制从单元格 P5 和 Q5 开始的数据透视表数据。我在另一个工作表(我想要粘贴数据的工作表)上按下了一个宏按钮,但我的代码是从活动工作表而不是从 inventorySheet 复制数据。

我是编码新手,但我的代码不应该是 Range("P5:Q5", Range("P5:Q5").End(xlDown))。从 inventorySheet 复制数据,因为它在 With 语句中?

With inventorySheet
    .PivotTables("inventoryPivot").ClearAllFilters
    .PivotTables("inventoryPivot").PivotFields("Type"). _
        CurrentPage = "REGIONAL"
    Range("P5:Q5", Range("P5:Q5").End(xlDown)).Copy
End With

谢谢!

【问题讨论】:

  • .Range("P5:Q5", .Range("P5:Q5").End(xlDown)).Copy 没有 . 它不属于 With 块
  • 代码在该行停止,运行时错误带有 .添加在范围前面,想知道它正在这样做
  • 错误是什么?仅供参考,而不是 Range...End,您可以直接引用要复制的 PT 部分:这是更安全的方法,请参阅peltiertech.com/referencing-pivot-table-ranges-in-vba
  • 运行时错误“1004”:对象“_Worksheet”的方法“范围”失败不知道 PT 有具体的引用,很高兴知道,谢谢!如何仅复制数据部分?不是标题,而是下面的所有数据。本质上是 DataBodyRange,但左侧的列也突出显示。
  • 嗨蒂姆,一直在谨慎地工作。我现在明白为什么在两个范围前面都需要.。相信它是从inventorySheet 调用的。否则,如果没有 .,即使它在 With 语句中,它也会从活动工作表调用。这是正确的吗?

标签: excel vba


【解决方案1】:

类似这样的:

Dim rngCopy As range
With inventorySheet.PivotTables("inventoryPivot")
    .ClearAllFilters
    .PivotFields("Type").CurrentPage = "REGIONAL"
    'data body range plus one column to the left...
    With .DataBodyRange
        Set rngCopy = .Offset(0, -1).Resize( , .Columns.Count +1)
    End with
    rngCopy.Copy
End With

【讨论】:

  • 太棒了,这很有效。你能解释一下 set rngCopy 部分吗?我理解数据范围体是右列(Q列),所以我们向左偏移一列(P列),但是resize部分是什么?
  • 我们将与DataBodyRange 对应的范围“移动”到左边一列,这样最右边的列就会不包括在内。调整一列的大小会扩大右侧边缘的范围,以重新包含该列。
  • 我们不能将DataBodyRange 向左移动,而是调整DataBodyRange 的大小以包含左侧的列吗? DataBodyRange 已经选择了正确的数据,为什么要移动它,然后重新调整大小?
  • 您只能通过扩大/缩小右下边框来调整范围...
  • 知道了。太棒了,感谢您在学习过程中的帮助。非常感谢蒂姆!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-09-17
  • 1970-01-01
  • 2020-04-09
  • 1970-01-01
  • 2018-07-22
  • 1970-01-01
相关资源
最近更新 更多