图表标题莫名其妙地消失了

Chart Title inexplicably disappearing

我有一个宏,它在给定工作簿的每个选项卡上创建一个图表(在做了一些其他事情之后)。作为其中的一部分,图表应该添加一个标题,标题设置为 sheet 名称。以下是我尝试这样做的方法:

S.Shapes.AddChart2(227, xlLine).Select
ActiveChart.SeriesCollection.NewSeries
ActiveChart.FullSeriesCollection(1).Name = "=" & S.Name & "!$H"
ActiveChart.FullSeriesCollection(1).Values = "=" & S.Name & "!$H:$H$" & i
ActiveChart.FullSeriesCollection(1).XValues = "=" & S.Name & "!$G:$G$" & i
temp = 0
Do While ActiveChart.HasTitle = False
    If temp <= 5 Then
        ActiveChart.HasTitle = True
        temp = temp + 1
    Else
        MsgBox "The script failed to add a title to the chart on " & S.Name
    End If
Loop
If ActiveChart.HasTitle Then
    ActiveChart.ChartTitle.Text = S.Name
End If

对于上下文,i 是 sheet 的最后一行数据(根据 sheet 上的数据点数动态设置),S 是一个 Worksheet 保存当前 sheet 的变量,temp 只是我为防止无限循环而添加的一个通用计数器。

真正让我感到困惑的是,错误发生在上面代码片段的倒数第二行。为了让宏到达那里,必须有一个图表标题。但是随后抛出的错误说没有。

如果我每次都执行上面的代码,则不会出现错误,但重新打开屏幕更新并激活 S 并不能阻止错误。

所以似乎有一些上下文没有被代码正确处理,但我不知道我遗漏了什么。

感谢您的帮助

我需要特定的错误,但我对 selected/Active 对象有奇怪的怪癖。如果这是对图表的引用,那么您应该能够用 "S" 替换那些 ActiveChart 引用。根据您的 Excel 版本,它可能是 S.Chart.SeriesCollection...

要测试的东西,请参阅'这一行

Dim cht as Chart

Set cht = S.Shapes.AddChart2(227, xlLine).Chart
cht.SetElement (msoElementChartTitleAboveChart) 'this line
cht.SeriesCollection.NewSeries
cht.FullSeriesCollection(1).Name = "=" & S.Name & "!$H"
cht.FullSeriesCollection(1).Values = "=" & S.Name & "!$H:$H$" & i
cht.FullSeriesCollection(1).XValues = "=" & S.Name & "!$G:$G$" & i
temp = 0
Do While cht.HasTitle = False
    If temp <= 5 Then
        cht.HasTitle = True
        temp = temp + 1
    Else
        MsgBox "The script failed to add a title to the chart on " & S.Name
    End If
Loop
If cht.HasTitle Then
    cht.ChartTitle.Text = S.Name
End If

taken from here

我最终使用的代码如下。感谢 Jimmy Smith 和 David Zemens,他们让我来到这里,只是想为将来找到此页面的任何人捕获最终状态

Dim ch as ChartObject

Set ch = S.ChartObjects.Add(Left:=Range("J2").Left, Top:=Range("J2").Top, Width:=500, Height:=325)
ch.Chart.SeriesCollection.NewSeries
ch.Chart.FullSeriesCollection(1).Name = "=" & S.Name & "!$H"
ch.Chart.FullSeriesCollection(1).Values = "=" & S.Name & "!$H:$H$" & i
ch.Chart.FullSeriesCollection(1).XValues = "=" & S.Name & "!$G:$G$" & i
ch.Chart.ChartType = xlLine
temp = 0
Do While ch.Chart.HasTitle = False
    If temp <= 5 Then
        ch.Chart.HasTitle = True
        temp = temp + 1
    Else
        MsgBox "The script failed to add a title to the chart on " & S.Name
    End If
Loop
If ch.Chart.HasTitle Then
    ch.Chart.ChartTitle.Text = S.Name
End If