Reputation: 23
I'm trying to create an excel which, using a couple of data validation toggle lists and a button, allows a user to display a specific plot for a specific stage of a model build. To do this, I need to be able to add series dynamically to a chart. I have found lots of material about this online, but in spite of my best efforts, I can't get my script to work. The lines within the if condition always seem to generate the following error "run time error '1004': application-defined or object-defined error". Any help would be greatly appreciated.
Sub UpdateChart()
'declaring variables'
Dim chrt As ChartObject
Dim chrtsercoll As SeriesCollection
Dim chtser As Series
'create the series collection from the chart'
Set chrt = ActiveSheet.ChartObjects(1)
'Get the series collection from the chart'
Set chrtsercoll = chrt.Chart.SeriesCollection
'delete all existing series in chart'
For Each chtser In chrtsercoll
chtser.Delete
Next chtser
'set up series in case of residual plot'
If Range("C21").Value = "residual series" Then
With chrtsercoll.NewSeries()
.Name = "=" & ActiveSheet.Name & "!B15"
.Values = "=" & ActiveSheet.Name & "!" & Evaluate(ActiveSheet.Names("RSr").Value)
End With
ActiveSheet.ChartObjects(1).Chart.ChartType = xlLine
End If
End Sub
Upvotes: 2
Views: 1016
Reputation: 23
Just figured out the answer to my comment thanks by actually paying attention to what I'd put in my excel, and VBA telling you what your function equals when you hover over it. Just thought I'd put the properly working code here for the sakes of completeness. Massive thanks to Tim once again!
Sub UpdateChart()
Dim ws As Worksheet
Set ws = ActiveSheet
With ws.ChartObjects(1).Chart
'remove existing data'
Do While .SeriesCollection.Count > 0
.SeriesCollection(1).Delete
Loop
'set up series in case of residual plot'
If ws.Range("C21").Value = "residual series" Then
With .SeriesCollection.NewSeries
.Name = "='" & ws.Name & "'!B15" 'use quotes in case sheet name has spaces'
.XValues = "=" & ws.Range("AC22").Value
.Values = "=" & ws.Range("AC15").Value
End With
.ChartType = xlLine
End If
End With
End Sub
Upvotes: 0
Reputation: 166126
Something like this should work.
XValues
Evaluate(ActiveSheet.Names("RSr").Value)
- maybe you can explain what you're doing there?Sub UpdateChart()
Dim ws As Worksheet
Set ws = ActiveSheet
With ws.ChartObjects(1).Chart
'remove existing data
Do While .SeriesCollection.Count > 0
.SeriesCollection(1).Delete
Loop
'set up series in case of residual plot'
If ws.Range("C21").Value = "residual series" Then
With .SeriesCollection.NewSeries
.Name = "='" & ws.Name & "'!B15" 'use quotes in case name has spaces
.XValues = 1 'you need to add something here....
.Values = "='" & ws.Name & "'!" & Evaluate(ActiveSheet.Names("RSr").Value)
End With
.ChartType = xlLine
End If
End With
End Sub
Upvotes: 2