【问题标题】:Get Source Range of a PivotTable获取数据透视表的源范围
【发布时间】:2013-01-08 19:01:06
【问题描述】:

我正在为一些对 Excel (2010) 中的数据透视图和数据透视表不太精通的用户构建一组每天更新的报告。我已经从我们的数据库中自动提取数据,但为了使这些信息有用(并且更易于使用),我想使用 VBA 生成数据透视。

我已经很好地生成了数据透视表,并且可以手动操作它们来创建相关图表。当我创建表格(全部在一张纸上)时,我正在标记它们(如果这有助于解决我的问题)。我遇到麻烦的地方是创建数据透视图,特别是设置数据源。

由于图表基于可能会根据存在的数据而改变大小的枢轴,因此我不能只指定一个固定范围作为源。命名范围也有同样的问题,因为我仍然不知道要分配名称的范围,除非我可以将 PT 分配为范围。

我尝试过类似的方法,但没有成功,因为我没有查看实际的“范围”对象:

Dim MyChartObject As ChartObject
Dim MyChart As Chart

'These variables are assigned elsewhere in the code.
Set MyChartObject = wksMainCharts.ChartObjects.Add( _
    iChartLeft, iChartTop, iChartWidth, iChartHeight)
Set MyChart = MyChartObject.Chart
MyChart.SetSourceData wksMainPivot.PivotTables(PivotName).SourceData 'Fails; requires Range object
'More code to follow...

我确实知道这是错误范围的字符串表示,但我正在玩我自己能想到的东西。

基本上我想要的是this question相反,它试图在指定范围内找到数据透视表。我还查看了this question,但这并不是我想要的(也没有提供答案)。

另外:我在这里寻求一种获取 PT 范围的方法,我认为知道这会很有趣,但最终,我只想创建数据透视图,所以如果有人想提供更好的方法比我开始的方法,我也完全开放。

【问题讨论】:

  • 该部分不需要 VBA:只需创建一个动态命名范围并将此名称用作枢轴的源。请参阅此帖子中的答案:superuser.com/questions/540307/…
  • 感谢您的链接,@PeterAlbert。我将来可能会研究这个(这是一个非常酷的概念!),但是数据没有被导入到我的工作簿中。相反,数据拉取为每次运行生成一个 Excel 文件。然后,我将使用加载项在这些新文件上运行此 VBA。我认为 Sid 的回答在这里最适合我。
  • 另请参阅此问题的答案:How can I get the ListObject object of a PivotTable 如果数据透视表未链接到正式的 Table (ListObject),则 SourceData 属性将返回数据的范围? activecell.PivotTable.PivotCache.SourceData

标签: vba excel excel-2010 pivot-table


【解决方案1】:

这是你想要达到的目标吗?

Sub Sample()
    Dim Chrt As Chart, pvtTbl As PivotTable

    Set pvtTbl = ActiveSheet.PivotTables(1)

    Set Chrt = ActiveSheet.ChartObjects(1).Chart

    Chrt.SetSourceData Source:=pvtTbl.TableRange1
End Sub

所以你的这一行

MyChart.SetSourceData wksMainPivot.PivotTables(PivotName).SourceData

变成

MyChart.SetSourceData wksMainPivot.PivotTables(PivotName).TableRange1

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-02-14
    • 2018-02-16
    • 2021-09-08
    相关资源
    最近更新 更多