Excel 2003 vba图表失败

时间:2013-04-11 21:29:49

标签: excel vba charts excel-2003

所以我得到一个图表失败错误,似乎是因为我的名字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") 

似乎有效

2 个答案:

答案 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,因为您的光标位于数据中,例如在单元格B5I10或其他单元格中。默认情况下,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")

应该更好。

(在这种情况下,只需使用宏录制器来获取正确的方法,然后根据您的需要调整它)

相关问题