所以我得到一个图表失败错误,似乎是因为我的名字WBname但我无法弄明白。之前有类似的问题,但由于这有点不同,我想我会提出一个新问题。这是代码我遇到的问题:
Dim WBname As String
WBname = Replace(ActiveWorkbook.Name, ".xls", "")
Worksheets(WBname).Activate
Charts.Add
ActiveChart.ChartType = xlXYScatterSmoothNoMarkers
ActiveChart.SeriesCollection(1).XValues = Worksheets(WBname).Range("A4:A5000")
ActiveChart.SeriesCollection(1).Values = Worksheets(WBname).Range("B4:B5000")
ActiveChart.SeriesCollection(1).Name = Worksheets(WBname).Range("B3")
ActiveChart.SeriesCollection.NewSeries
ActiveChart.SeriesCollection(2).XValues = Worksheets(WBname).Range("A4:A5000")
ActiveChart.SeriesCollection(2).Values = Worksheets(WBname).Range("C4:C5000")
ActiveChart.SeriesCollection(2).Name = Worksheets(WBname).Range("C3")
ActiveChart.SeriesCollection.NewSeries
ActiveChart.SeriesCollection(3).XValues = Worksheets(WBname).Range("A4:A5000")
ActiveChart.SeriesCollection(3).Values = Worksheets(WBname).Range("D4:D5000")
ActiveChart.SeriesCollection(3).Name = Worksheets(WBname).Range("D3")
ActiveChart.SeriesCollection.NewSeries
ActiveChart.SeriesCollection(4).XValues = Worksheets(WBname).Range("A4:A5000")
ActiveChart.SeriesCollection(4).Values = Worksheets(WBname).Range("I4:I5000")
ActiveChart.SeriesCollection(4).Name = Worksheets(WBname).Range("I3")
WBname就像我想要的那样出现,但我仍然会遇到错误。
Method 'SeriesCollection' of object '_Chart' Failed
工作表名称正在动态更改并与WBname FYI匹配。
编辑:我添加了
ActiveChart.SetSourceData Source:=Sheets(WBname).Range("A4:A5000")
似乎有效
答案 0 :(得分:1)
您收到该错误是因为您正在尝试将值分配给不存在的系列;)
您需要先添加系列,然后为其指定值。见这个例子
Sub Sample()
Dim WBname As String
WBname = Replace(ActiveWorkbook.Name, ".xls", "")
Worksheets(WBname).Activate
Charts.Add
ActiveChart.ChartType = xlXYScatterSmoothNoMarkers
ActiveChart.SeriesCollection.NewSeries '<~~~~~ SEE THIS
ActiveChart.SeriesCollection(1).XValues = Worksheets(WBname).Range("A4:A5000")
ActiveChart.SeriesCollection(1).Values = Worksheets(WBname).Range("B4:B5000")
ActiveChart.SeriesCollection(1).Name = Worksheets(WBname).Range("B3")
End Sub
<强>后续强>
您正在获得额外的系列sometimes
,因为您的光标位于数据中,例如在单元格B5
或I10
或其他单元格中。默认情况下,Excel会在这种情况下说Charts.Add
时添加系列。确保在运行宏时未选择任何数据。另一种方法是在Charts.Add
之后删除系列集合。见这个例子
Sub Sample()
Dim WBname As String
Dim i As Long
WBname = Replace(ActiveWorkbook.Name, ".xls", "")
Worksheets(WBname).Activate
Charts.Add
With ActiveChart
On Error Resume Next
For i = .SeriesCollection.Count To 1 Step -1
.SeriesCollection(i).Delete
Next i
On Error GoTo 0
.ChartType = xlXYScatterSmoothNoMarkers
.SeriesCollection.NewSeries
.SeriesCollection(1).XValues = Worksheets(WBname).Range("A4:A5000")
.SeriesCollection(1).Values = Worksheets(WBname).Range("B4:B5000")
.SeriesCollection(1).Name = Worksheets(WBname).Range("B3")
.SeriesCollection.NewSeries
.SeriesCollection(2).XValues = Worksheets(WBname).Range("A4:A5000")
.SeriesCollection(2).Values = Worksheets(WBname).Range("C4:C5000")
.SeriesCollection(2).Name = Worksheets(WBname).Range("C3")
.SeriesCollection.NewSeries
.SeriesCollection(3).XValues = Worksheets(WBname).Range("A4:A5000")
.SeriesCollection(3).Values = Worksheets(WBname).Range("D4:D5000")
.SeriesCollection(3).Name = Worksheets(WBname).Range("D3")
.SeriesCollection.NewSeries
.SeriesCollection(4).XValues = Worksheets(WBname).Range("A4:A5000")
.SeriesCollection(4).Values = Worksheets(WBname).Range("I4:I5000")
.SeriesCollection(4).Name = Worksheets(WBname).Range("I3")
End With
End Sub
答案 1 :(得分:0)
你不知道你想要用什么工作表。 (假设确实需要工作簿,大多数时候情况并非如此):
Workbooks(WBname).Sheets("Sheet1").Range("A4:A5000")
应该更好。
(在这种情况下,只需使用宏录制器来获取正确的方法,然后根据您的需要调整它)