0

我需要在 Excel 中为每张工作表创建一个图表。这是我的代码:

    Sheets(i).Activate

    For Each cht In ActiveSheet.ChartObjects
        cht.Delete
    Next

    'create chart
    Set chtChart = ActiveSheet.ChartObjects.Add(Left:=75, Width:=300, Top:=75, Height:=300).Chart
    With chtChart
        .ChartType = xlXYScatterSmooth

        Do While .SeriesCollection.Count <> 0
            Do Until .SeriesCollection.Count = 0
                .SeriesCollection(1).Delete
            Loop
        Loop

        Set srsNew = .SeriesCollection.NewSeries
        With srsNew
            .XValues = "='" & Sheets(i).Name & "'!" & _
            Sheets(i).Range(Range("K2"), Range("k2").End(xlDown)).Address
            .Values = "='" & Sheets(i).Name & "'!" & _
            Sheets(i).Range(Range("l2"), Range("l2").End(xlDown)).Address
        End With
    End With

对于第一张纸,这有效,但对于第二张,第三张……它没有。它在 XValues 或 Values 中发出错误 1004“应用程序定义或对象定义错误”。我还注意到,如果我介绍

range("K2")

在 with 块之外,我在第二张、第三张.... 表中出现错误,但在第一张中没有。

任何建议都是最受欢迎的

问候

若昂

4

2 回答 2

4
  1. Range用它们所属的表来限定你的 s。
  2. 不要使用SelectActiveSheet
  3. 不要建立字符串地址。直接使用范围。
Dim CurSheet As Worksheet, cht As ChartObject
Dim chtChart As Chart, srsNew As Series

...

Set CurSheet = Worksheets(i)

For Each cht In CurSheet.ChartObjects
  cht.Delete
Next


'create chart
Set chtChart = CurSheet.ChartObjects.Add(Left:=75, Width:=300, Top:=75, Height:=300).Chart
With chtChart
  .ChartType = xlXYScatterSmooth

  Do While .SeriesCollection.Count <> 0
    .SeriesCollection(1).Delete
  Loop

  Set srsNew = .SeriesCollection.NewSeries
  With srsNew
    .XValues = CurSheet.Range(CurSheet.Range("k2"), CurSheet.Range("k2").End(xlDown))
    .Values = CurSheet.Range(CurSheet.Range("l2"), CurSheet.Range("l2").End(xlDown))
  End With
End With
于 2012-04-17T21:52:36.170 回答
1

如果您像这样完全限定这些范围,也许会有所帮助:

With srsNew
    .XValues = "='" & Sheets(i).Name & "'!" & _
    Sheets(i).Range(Sheets(i).Range("K2"), Sheets(i).Range("k2").End(xlDown)).Address
    .Values = "='" & Sheets(i).Name & "'!" & _
    Sheets(i).Range(Sheets(i).Range("l2"), Sheets(i).Range("l2").End(xlDown)).Address
End With
于 2012-04-17T21:53:00.113 回答