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