0

Excel でシートごとに 1 つのグラフを作成する必要があります。これが私のコードです:

    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

最初のシートではこれは機能しますが、2 番目、3 番目のシートでは機能しません。XValuesまたはValuesでエラー1004「アプリケーション定義またはオブジェクト定義エラー」を発行します。私も紹介したら気づいた

range("K2")

with ブロックの外側では、2 番目、3 番目の .... シートでエラーが発生しますが、最初のシートでは発生しません。

どんなアドバイスでも大歓迎です

よろしく

ジョアン

4

2 に答える 2

4
  1. Range所属するシートで を修飾します。
  2. Selectまたはを使用しないでくださいActiveSheet
  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 に答える