Вам необходимо определить, на каком листе находятся эти Range
и Shape
объекты. Например,
Set StartCell = .Range("e1")
Set chrt = .Shapes.AddChart.Chart
определить ws
как рабочий лист:
Set StartCell = ws.Range("e1")
Set chrt = ws.Shapes.AddChart.Chart
Обратите внимание, что операторы могут начинаться с точки .Range
, только если они находятся внутри оператора With
. Таким образом, вышесказанное совпадает со следующим:
With ws
Set StartCell = .Range("e1")
Set chrt = .Shapes.AddChart.Chart
End With
Вам также нужно проверить другие объекты диапазона, потому что они начинаются как .Range("$F$1")
, они ссылаются на With chrt
, который является объектом диаграммы, но они должны ссылаться на ws.Range("$F$1")
.
Таким образом, вы должны получить что-то вроде:
Option Explicit
Public Sub graph()
Dim ws As Worksheet
Dim chrt As Chart
Dim StartCell As Range
For Each ws In Worksheets
Set StartCell = ws.Range("e1")
Set chrt = ws.Shapes.AddChart.Chart
With chrt
.SetSourceData Source:=ws.Range("$C$1:$D$11")
.ChartType = xlLine
.SeriesCollection(1).Name = ws.Range("$F$1")
.SeriesCollection(1).XValues = ws.Range("A2:A" & ws.Range("A" & ws.Rows.Count).End(xlUp).Row)
.SeriesCollection(1).Values = ws.Range("E2:E" & ws.Range("E" & ws.Rows.Count).End(xlUp).Row)
.SeriesCollection(2).Name = ws.Range("$E$1")
.SeriesCollection(2).XValues = ws.Range("E2:E" & ws.Range("E" & ws.Rows.Count).End(xlUp).Row)
.SeriesCollection(2).Values = ws.Range("F2:F" & ws.Range("F" & ws.Rows.Count).End(xlUp).Row)
.HasTitle = True
.ChartTitle.Characters.Text = "Effektivitet"
End With
Next ws
End Sub