图表标题莫名其妙地消失了
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
我最终使用的代码如下。感谢 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
我有一个宏,它在给定工作簿的每个选项卡上创建一个图表(在做了一些其他事情之后)。作为其中的一部分,图表应该添加一个标题,标题设置为 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
我最终使用的代码如下。感谢 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