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

时间:2015-02-03 18:53:24

标签: excel vba charts

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

S.Shapes.AddChart2(227, xlLine).Select
ActiveChart.SeriesCollection.NewSeries
ActiveChart.FullSeriesCollection(1).Name = "=" & S.Name & "!$H$1"
ActiveChart.FullSeriesCollection(1).Values = "=" & S.Name & "!$H$2:$H$" & i
ActiveChart.FullSeriesCollection(1).XValues = "=" & S.Name & "!$G$2:$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是该表的最后一行数据(根据该表上的数据点动态设置),S是一个保存当前表的Worksheet变量,temp只是一个通用计数器I添加以防止无限循环。

真正让我感觉到的是,错误发生在上面代码段的倒数第二行。因为宏甚至已经到了那里,所以必须有一个图表标题。但随后抛出的错误表明没有错误。

如果我每次单步执行上面的代码,但是重新打开screenupdates并激活S并不会阻止错误,则不会发生错误。

所以似乎有一些上下文没有被代码正确处理,但我无法弄清楚我错过了什么。

感谢您的帮助

2 个答案:

答案 0 :(得分:2)

我需要特定的错误,但我对选定的/ Active对象有奇怪的怪癖。如果它是对图表的引用,那么您应该能够用&#34; S&#34;替换那些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$1"
cht.FullSeriesCollection(1).Values = "=" & S.Name & "!$H$2:$H$" & i
cht.FullSeriesCollection(1).XValues = "=" & S.Name & "!$G$2:$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

答案 1 :(得分:1)

我最终采用的代码如下。吉姆史密斯和大卫泽曼的所有功劳,他们让我来到这里,只是想为将来找到这个页面的人捕捉最终状态

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$1"
ch.Chart.FullSeriesCollection(1).Values = "=" & S.Name & "!$H$2:$H$" & i
ch.Chart.FullSeriesCollection(1).XValues = "=" & S.Name & "!$G$2:$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