Excel 2003 vba图表失败

所以即时获取图表失败的错误,这似乎是因为我的名字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 

工作表名称是dynamic更改的,并与WBname FYI匹配。

编辑:我加了

 ActiveChart.SetSourceData Source:=Sheets(WBname).Range("A4:A5000") 

它似乎工作

你正在得到这个错误,因为你正在试图给那些不在那里的系列赋值;)

您需要先添加系列,然后为其分配值。 看到这个例子

 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得到额外的系列,因为您的光标位于单元格B5I10或其他单元格中的数据中。 在默认情况下,Excel会默认为Charts.Add 。 确保在运行macros时没有select任何数据。 另一种方法是在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 

你不知道你想要的工作表。 (假设工作簿真的需要,大部分时间情况并非如此):

 Workbooks(WBname).Sheets("Sheet1").Range("A4:A5000") 

应该更好地工作。

(在这种情况下,只需使用macroslogging器来获得正确的方法,然后根据需要进行调整)