我正在构建一组报告,每天更新一些用户,这些用户在Excel(2010)中使用数据透视图和数据透视表时并不精通。我从数据库中已经自动获取数据,但为了使这些信息有用(并且使用起来更简单),我想使用VBA生成枢轴。
我已经很好地生成了数据透视表,可以手动操作它们来创建相关的图表。当我创建表格(全部在一张纸上)时,我正在标记它们(如果这有助于解决我的问题)。我遇到麻烦的地方是创建数据透视表,特别是设置数据源。
由于图表基于可能根据存在的数据而改变大小的枢轴,因此我不能仅将固定范围指定为源。与命名范围相同的问题,因为我仍然不知道指定名称的范围,除非我可以将PT指定为范围。
我尝试过类似的东西,但这不起作用,因为我不是在看实际的'Range'对象:
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的范围,我认为这很有趣,但最终,我只是想创建数据透视图,所以如果有人想要提供更好的方法比我开始的方式,我对此也完全开放。
答案 0 :(得分: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