Doh! The way I wrote the previous macro, only the values from the new
range were put into the chart series formula. The following macro
actually changes the range referenced in the series formula.
Sub ExtendSeries()
' Extend selected series by one point
' Requires John Walkenbach's ChartSeriesInfo Class
'
http://j-walk.com
Dim MyChart As New ChartSeries
Dim sSers As String
Dim rngSers As Range
If TypeName(Selection) = "Series" Or _
TypeName(Selection) = "Point" Then
sSers = Application.ExecuteExcel4Macro("SELECTION()")
If InStr(1, sSers, "P") Then sSers = _
Left(sSers, InStr(1, sSers, "P") - 1)
sSers = Mid(sSers, 2)
With MyChart
.Chart = ActiveChart
.ChartSeries = CInt(sSers)
If .ValuesType = "Range" Then
Set rngSers = .Values
If rngSers.Rows.Count > 1 Then
Set rngSers = rngSers.Resize _
(rowsize:=rngSers.Rows.Count + 1)
ElseIf rngSers.Columns.Count > 1 Then
Set rngSers = rngSers.Resize _
(columnsize:=rngSers.Columns.Count + 1)
End If
.Values = rngSers
End If
If .XValuesType = "Range" Then
Set rngSers = .XValues
If rngSers.Rows.Count > 1 Then
Set rngSers = rngSers.Resize _
(rowsize:=rngSers.Rows.Count + 1)
ElseIf rngSers.Columns.Count > 1 Then
Set rngSers = rngSers.Resize _
(columnsize:=rngSers.Columns.Count + 1)
End If
.XValues = rngSers
End If
End With
End If
End Sub
Sub ExtendSeries()
' Extend selected series by one point
' Requires John Walkenbach's ChartSeriesInfo Class
'
http://j-walk.com
Dim MyChart As New ChartSeries
Dim sSers As String
Dim rngSers As Range
If TypeName(Selection) = "Series" Or _
TypeName(Selection) = "Point" Then
sSers = Application.ExecuteExcel4Macro("SELECTION()")
If InStr(1, sSers, "P") Then sSers = _
Left(sSers, InStr(1, sSers, "P") - 1)
sSers = Mid(sSers, 2)
With MyChart
.Chart = ActiveChart
.ChartSeries = CInt(sSers)
If .ValuesType = "Range" Then
Set rngSers = .Values
If rngSers.Rows.Count > 1 Then
Set rngSers = rngSers.Resize _
(rowsize:=rngSers.Rows.Count + 1)
ElseIf rngSers.Columns.Count > 1 Then
Set rngSers = rngSers.Resize _
(columnsize:=rngSers.Columns.Count + 1)
End If
.Values = rngSers
End If
If .XValuesType = "Range" Then
Set rngSers = .XValues
If rngSers.Rows.Count > 1 Then
Set rngSers = rngSers.Resize _
(rowsize:=rngSers.Rows.Count + 1)
ElseIf rngSers.Columns.Count > 1 Then
Set rngSers = rngSers.Resize _
(columnsize:=rngSers.Columns.Count + 1)
End If
.XValues = rngSers
End If
End With
End If
End Sub