在Excel 2010中使用VBA定位图表

3

我正在尝试将图表添加到工作表中,然后根据某个单元格范围来定位它。我正在使用.top、.left等函数,但它一直给我一个错误,说我的对象不支持所使用的方法。我做错了什么?!以下是我的代码:

Sub AddCharts()

Range("O1").Select

Dim sh As Worksheet
Dim chrt As Chart
Dim lastrow As Long

lastrows = Range("A2").End(xlDown).Row

Set sh = ActiveWorkbook.Worksheets("TraceTable")
Set chrteit = sh.Shapes.AddChart.Chart

With chrteit
.ChartType = xlXYScatter
.SeriesCollection.NewSeries
.SeriesCollection(1).XValues = sh.Range(Cells(2, 6), Cells(lastrows, 6))
.SeriesCollection(1).Values = sh.Range(Cells(2, 7), Cells(lastrows, 7))

    .HasTitle = True
    .ChartTitle.Text = "EIT"
    .Height = Range("N2:N14").Height
    .Width = Range("N2:T2").Width
    .Top = Range("N2").Top
    .Left = Range("N2").Left
End With

End Sub

好的,Chart对象没有 HeightWidthTopLeft 属性,这就是它所抱怨的。 - djikay
如何使它具有这些属性? - art123456
可能是 使用 VBA 的图表绝对位置 的重复问题。 - Stevoisiak
2个回答

8

继续我的下面对原始帖子的评论,尝试替换:

.Height = Range("N2:N14").Height
.Width = Range("N2:T2").Width
.Top = Range("N2").Top
.Left = Range("N2").Left

使用:

.Parent.Height = Range("N2:N14").Height
.Parent.Width = Range("N2:T2").Width
.Parent.Top = Range("N2").Top
.Parent.Left = Range("N2").Left

完美运行!但是你能解释一下为什么使用父级和不使用会有差异吗? - art123456
1
@art123456:图表本身只是一个代码对象(Chart)。为了在电子表格中表示它,它被添加到一个容器(ChartObject)中,该容器具有这些属性,因为它必须放置在某个位置。实际上,嵌入工作表的是图表对象,而图表对象包含图表。 - djikay

5

Chart没有.Top.Left等属性,但它的父容器ChartObject具有这些属性。

因此,不要使用.Height =,而是使用.Parent.Height =等。

.Parent.Height = Range("N2:N14").Height
.Parent.Width = Range("N2:T2").Width
.Parent.Top = Range("N2").Top
.Parent.Left = Range("N2").Left

谢谢!我希望我也能让你的答案正确,但我只能选择一个。尽管如此,我非常感激你的帮助。 - art123456
如果这篇文章对您有帮助,您可以简单地点赞。从技术上讲,您可以取消接受其他文章并接受这篇文章,但我不会要求您这样做。 - David Zemens

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接