2013-01-24 224 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