2012-04-17 9 views
0

Excelでシートごとに1つのチャートを作成する必要があります。ここに私のコードはあります: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 

最初のシートについては、これは動作しますが、2番目、3番目に...それはありません。 XValuesまたはValuesにエラー1004 "アプリケーション定義またはオブジェクト定義エラー"を発行します。また、私が紹介した場合には、ブロック付きではなく、第2、第3 ....シートではエラーが発生しますが、最初のものではエラ​​ーが発生することに気付きました。

任意のアドバイスは、彼らが属する

よろしく

ジョアンは

答えて

4
  1. がシートを使用してRange Sを修飾大歓迎です。
  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 
+0

感謝を!非常に良いヒント! – jpcgandre

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 
+0

ありがとうございます!できます! – jpcgandre

関連する問題