我正在设置一个需要每周更新的工作簿。 它包含10张纸,我试图创建一个为每张纸制作图形的循环。
我尝试了一个带有sh.activate的循环,最终使用所有工作表中的worksheet1中的数据创建了一个图形。 在此之后,我尝试创建不带.activate的外观,但确实可以工作 这是正确的方法吗?
Sub graph()
Dim ws As Worksheet
Dim chrt As Chart
Dim StartCell As Range
For Each ws In Worksheets
Set StartCell = .Range("e1")
Set chrt = .Shapes.AddChart.Chart
With chrt
.SetSourceData Source:=Range("$C$1:$D$11")
.ChartType = xlLine
.SeriesCollection(1).Name = .Range("$F$1")
.SeriesCollection(1).XValues = .Range("A2:A" & Range("A" & Rows.Count).End(xlUp).Row)
.SeriesCollection(1).Values = .Range("E2:E" & Range("E" & Rows.Count).End(xlUp).Row)
.SeriesCollection(2).Name = .Range("$E$1")
.SeriesCollection(2).XValues = .Range("E2:E" & Range("E" & Rows.Count).End(xlUp).Row)
.SeriesCollection(2).Values = .Range("F2:F" & Range("F" & Rows.Count).End(xlUp).Row)
.HasTitle = True
.ChartTitle.Characters.Text = "Effektivitet"
End With
Next ws
End Sub
答案 0 :(得分:4)
您需要定义这些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