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
得到额外的系列,因为您的光标位于单元格B5
或I10
或其他单元格中的数据中。 在默认情况下,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器来获得正确的方法,然后根据需要进行调整)