在图表工作表中放置多个图表时,如何使用vba更改图表属性?

时间:2012-01-24 18:03:41

标签: excel-vba vba excel

我可以通过创建一个空的图表工作表,然后将图表的位置设置为该空图表来在图表工作表上放置多个图表。

'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

代码返回运行时错误 Object不支持此属性或方法。我知道可以通过单击和拖动手动移动图形,并且我知道如果图表在正常工作表中,上面的代码可以工作。但由于某种原因,当图表在图表中时,此代码会失败。有没有办法让VBA做我想做的事?

感谢您的帮助。

1 个答案:

答案 0 :(得分: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

从那里你应该可以移动和格式化等。