3

我正在为一些对 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...

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

基本上我想要的是这个问题的反面试图在指定范围内找到数据透视表。我也回顾了这个问题,但这并不是我想要的(也没有提供答案)。

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

4

1 回答 1

6

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

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
于 2013-01-24T21:48:09.483 回答