1

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

它似乎工作

4

2 回答 2

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其他单元格中。Charts.Add当您在这种情况下说时,Excel 默认会添加系列。确保在运行宏时未选择任何数据。另一种方法是在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
于 2013-04-11T21:58:02.357 回答
0

你没有告诉你要处理什么工作表。(假设确实需要 Workbook,但大多数情况下并非如此):

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

应该工作得更好。

(在这种情况下,只需使用宏记录器来获得正确的方法并在之后根据您的需要进行调整)

于 2013-04-11T21:37:27.333 回答