为什么只有添加MsgBox时我的VBA代码才能工作?

时间:2018-11-26 21:50:31

标签: excel vba

编辑:我相信我的错误消息“每个图表的最大数据系列数为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"

当代码正常工作时,我得到了一个带有预期标题的图表。当它不起作用时,我会收到一条错误消息,指出图表没有标题。

1 个答案:

答案 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中进行了测试,并且可以工作。还向代码中添加了注释以进行澄清。