2012-01-24 57 views
0

我可以通過創建一個空的圖表,然後將圖表的位置設置爲空圖表工作表,在圖表上放置多個圖表。在圖表中放置多個圖表時,如何使用vba更改圖表屬性?

'This creates multiple charts within a single chart sheet! 

Charts.Add 'Creates empty chart page when empty cell is selected 

'Keep track of chart page for later reference 
Dim chartSheet As String 
chartSheet = ActiveChart.Name 

.... 'Create three separate charts with data here 

'Now place these charts within our empty chart page 

Set chart1 = chart1.Location(Where:=xlLocationAsObject, Name:=chartSheet) 
Set chart2 = chart2.Location(Where:=xlLocationAsObject, Name:=chartSheet) 
Set chart3 = chart3.Location(Where:=xlLocationAsObject, Name:=chartSheet) 

所有的代碼一直工作到這一點。圖表包含所有3個圖表,儘管圖表全部重疊。當我嘗試調整圖表的位置...

'This code fails to run! 
chart1.Parent.Top = 0 
chart1.Parent.Left = 0 

代碼返回對象的運行時錯誤不支持此屬性或方法。我知道可以通過單擊和拖動來手動移動圖形,並且我知道如果圖表位於正常工作表內,上面的代碼就可以工作。但由於某種原因,當圖表位於圖表中時,此代碼會失敗。有沒有辦法讓VBA做我想做的事?

感謝您的幫助。

回答

0

經過一些實驗,我相信你的代碼沒有運行,因爲chart1是它自己的工作表。

當我鑽入選定圖表時,我注意到以下差異。如果嵌入圖表(另一張表中的對象),ParentObject/ChartObject,它具有TopLeft(它在工作表中的相對位置)屬性。如果圖表是自己的工作表,則Parent實際上是Object/Thisworkbook' which does not have頂部or左'屬性。這很有意義,因爲當您創建chartSheet時,圖表會填充整個工作表區域,因此不能有相對位置。

如果你在chart1.Parent.Top = 0上插入斷點並查看當地人....你可以看到我上面解釋過的。

編輯:建議在評論中重新提出您的要求。

子項包含在工作表對象的「形狀」集合中。我用下面的顯示所有形狀的名稱在工作表中

For i = 1 To ActiveWorkbook.ActiveSheet.Shapes.Count 
    temp = temp & i & " " & ActiveWorkbook.ActiveSheet.Shapes(i).Name & vbCr 
Next 

MsgBox temp 

從那裏,你應該能夠移動和格式化等

+0

我懷疑了。它是有道理的,chart1.Parent並沒有提到我認爲它會提及的東西。 我用你的提示,並更密切地分析了對象模型。我認爲它的工作方式是這樣的:chart1屬於工作簿本身,但我想要的三個圖表實際上是chart1的* children *。如果我能找到包含在外部圖表內的圖表對象,那麼我可以操縱這些位置。 – Roman

+0

我已經更新了我的答案,提出了一個解決方案來循環瀏覽孩子 – Pynner

相關問題