2013-01-24 221 views
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... 

我知道这是一个字符串表示错误的范围,但我正在玩我自己想象的东西。

基本上我想要的是对面this question,它寻求在指定的范围内找到数据透视表。我也审查了this question,但它不是我正在寻找的东西(也没有提供答案)。我在这里要求一种获得PT的范围的方法,我认为这很有趣,但最终我只是想创建数据透视表,所以如果有人想提供一个比我开始的方法更好,我也完全开放。

+2

无需VBA的那部分:简单地创建一个动态的命名范围,并使用该名称作为源的支点。请参阅本文中的答案:http://superuser.com/questions/540307/a-way-to-automatically-determine-ranges-in-excel/540341#540341 –

+0

感谢您的链接,@PeterAlbert。我将来可能会考虑这个(这是一个非常酷的概念!),但是这些数据没有被导入到我的工作簿中。数据拉动是为每次运行生成一个Excel文件。然后,我将使用加载项在这些新文件上运行此VBA。 Sid的回答我认为在这里最适合我。 – Gaffi

+0

也请参阅此问题的答案:[如何获取数据透视表的ListObject对象](https://stackoverflow.com/a/46109152/2712565)如果数据透视表未链接到正式的_Table_(ListObject), ** SourceData **属性将返回_range_的数据:'? activecell.PivotTable.PivotCache.SourceData' – GlennFromIowa

回答

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 
+0

再次感谢Sid。这很好! – Gaffi