Looks OK and compiles but this is untested "tidy up" code. Dave
Option Explicit
Function CreateLineCharts() As Boolean
Dim rngChtData As Range, rngChtXVal As Range, WSD As Worksheet
Dim chtObjs As ChartObjects, finalRow As Long, i As Integer
Dim chtObj As ChartObject, chartName As String
Dim dataString As String, ChtCnt As Integer
Set WSD = Worksheets("Graphics")
'turn off autofilter mode
WSD.AutoFilterMode = False
'remove previous chart
chartName = CStr(WSD.Cells(i, 1).Value)
Set chtObjs = WSD.ChartObjects
For Each chtObj In chtObjs
If chtObj.Name = chartName Then
chtObj.Delete
End If
Next
'add new chart
ChtCnt = WSD.ChartObjects.Count + 1
Charts.Add.Location Where:=xlLocationAsObject, Name:=WSD
WSD.ChartObjects(ChtCnt).Chart.ChartType = xlLineStacked
WSD.ChartObjects(ChtCnt).Name = chartName
WSD.ChartObjects(chartName).Placement = xlMoveAndSize
'define the x axis values
Set rngChtXVal = WSD.Range("$B$1:$P$1")
With WSD.ChartObjects(chartName).Chart
'to determine how many values to loop over, find the last row in the data set
finalRow = WSD.Cells(WSD.Rows.Count, 2).End(xlUp).Row
For i = 1 To finalRow
'define chart data range for the row (record)
dataString = "B" & i & ":P" & i
Set rngChtData = WSD.Range(dataString)
'add series from selected range, column by column
With .SeriesCollection.NewSeries
.Values = rngChtData
.XValues = rngChtXVal
.Name = "XX" & i
End With
Next i
WSD.ChartObjects(chartName).Chart.SeriesCollection(1).Delete
End With
If Err.Number = 0 Then
CreateLineCharts = True
Else
MsgBox "Error"
CreateLineCharts = False
End If
End Function