我可以通过创建一个空的图表工作表,然后将图表的位置设置为该空图表来在图表工作表上放置多个图表。
'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做我想做的事?
感谢您的帮助。
答案 0 :(得分:0)
经过一些实验后,我相信你的代码没有运行,因为chart1
是它自己的工作表。
当我钻进选定的图表时,我注意到以下差异。如果嵌入了图表(另一个工作表中的对象),则Parent
为Object/ChartObject
,其中包含属性Top
和Left
(它在工作表中的相对位置)。如果图表是自己的工作表,则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
从那里你应该可以移动和格式化等。