编辑:我相信我的错误消息“每个图表的最大数据系列数为255”与我在调用AddChart2方法之前进行的范围选择有关。我仍然不知道为什么以前说过我的图表没有标题,即使我声明.HasTitle为真实。考虑一下这个问题现在是否已解决,尽管我仍然想知道为什么它以前无法正常工作。
此外,在我正在使用的实际子例程中,预先存在的图表对象在获取此代码之前被删除,因此ChartObjects(1)索引没有问题。
下面代码的成功完全取决于我是否包含MsgBox函数。此外,它似乎仅在我将此特定参数传递给MsgBox时才起作用(即使页面上只有一个ChartObject,键入“ MsgBox 1”也不起作用)。有人知道为什么吗?
ActiveSheet.Shapes.AddChart2(227, xlLine).Select
ActiveChart.SetSourceData Source:=Range("$M2:$M" & CStr(Cells(Rows.Count, 13).End(xlUp).Row))
'MsgBox ActiveSheet.ChartObjects.Count
With Sheets("blah").ChartObjects(1).Chart
.HasTitle = True
End With
MsgBox Sheets("blah").ChartObjects(1).Chart.HasTitle ' (always returns True)
Sheets("blah").ChartObjects(1).Chart.ChartTitle.Text = "bleh"
当代码正常工作时,我得到了一个带有预期标题的图表。当它不起作用时,我会收到一条错误消息,指出图表没有标题。
答案 0 :(得分:1)
假设ActiveSheet为Sheet("blah")
,请尝试...
Dim theChart As ChartObject ' Reference the new or existing chart
Dim sourceRange As Range ' Chart's data source
' Create or attach to the chart and get the chart's source data range
With Sheets("blah")
' Create the chart if it doesn't exist
If .ChartObjects.Count = 0 Then
.Shapes.AddChart2 227, xlLine
End If
' Grab a pointer to the chart
Set theChart = .ChartObjects(1)
' Grab a pointer to the source range while inside the sheet's WITH block
Set sourceRange = .Range("$M2:$M" & CStr(.Cells(.Rows.Count, 13).End(xlUp).Row))
End With
' Set the chart up.
With theChart.Chart
.SetSourceData source:=sourceRange
.HasTitle = True
.ChartTitle.Text = "bleh"
End With
' Clean up
Set theChart = Nothing
Set sourceRange = Nothing
编辑:我测试原始代码时出错。这已经在Excel 2016中进行了测试,并且可以工作。还向代码中添加了注释以进行澄清。