【问题标题】:Copy a Pivot Table with VBA使用 VBA 复制数据透视表
【发布时间】:2017-11-29 16:37:05
【问题描述】:

我正在编写一个应该在新摘要工作表中创建表格和图形的 excel 宏,但我在宏需要过滤数据透视表然后复制/粘贴的部分遇到了问题在摘要工作表中。听起来很简单,但出于某种原因,我在目标范围内只得到一个值为 0 的单元格。然而,过滤是正确的。这是发生这种情况的代码部分。

    Dim pt As PivotTable: Set pt = errprov.PivotTables("ErroresProveedor")
    On Error Resume Next
    pt.PivotFields("DESCRIPCIONESGLOBALES").ClearAllFilters
    pt.PivotFields("DESCRIPCIONESGLOBALES").CurrentPage =actual.Range("A2").Value
    pt.PivotFields("DATA DE").ClearAllFilters
    pt.PivotFields("DATA DE").CurrentPage = "SA"

    'The problem is here
    Dim rng As Range
    Set rng = errprov.Range("A7", Range("A7").End(xlToRight).End(xlDown))
    actual.Activate
    rng.Copy Range("A" & fila)

我的范围属性出错,可能是因为那里有一个数据透视表,但我也尝试使用自己的方法选择表作为对象,就像我在其他帖子中发现的那样,我得到了相同的结果(值为 0 的单个单元格)。

【问题讨论】:

  • 你给fila赋值了吗?
  • 每个值都已正确分配,我逐步运行宏,fila 具有我想要的值。问题是当我复制表格时,我在 A & fila (122) 单元格上得到了 0。
  • 注释掉On Error Resume Next,看看有没有错误。
  • @SJR 与编辑请求的想法相同,认为这是某种规则或某种东西,这是我的第一篇文章。顺便说一句,您的解决方案不起作用,非常感谢您尝试提供帮助。
  • 编辑只是为了声望点,根本不需要!我同意你的看法@SJR!确实很奇怪。

标签: vba excel pivot-table


【解决方案1】:
Set rng = errprov.Range("A7", Range("A7").End(xlToRight).End(xlDown))

应该是

Set rng = errprov.Range("A7:" & Range("A7").End(xlToRight).End(xlDown).Address)

【讨论】:

  • 谢谢!它起作用了,虽然部分。该表已复制到我指定的范围,但只是前 2 列。我认为这可能是 .End 的问题,但是当我使用 Ctrl+Shift+ArrowKey 手动选择表格时(它应该与 .End 相同),我可以将其全部选中。知道为什么会这样吗?
  • 当您手动操作时,您是向右然后向下,还是向下然后向右?您的代码正在执行前者。 Ctrl+Shift+ArrowKey 在它遇到的第一个空白单元格之前停止,所以听起来 c7 是空白的
  • 我要手动上下左右,这很奇怪。我将尝试在宏中执行此操作,然后查看它是否有效。
  • 当我先向下然后向右执行时,我在目的地得到完全相同的部分表。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-06-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-12-24
相关资源
最近更新 更多