2012-04-17 2 views
0

Мне нужно создать один график на листе в Excel. Вот мой код: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 

Для первого листа это работает, но для второго, третьего ... это не так. Он выдает ошибку 1004 «определение приложения или объектная ошибка» в значениях или значениях. Я также заметил, что если я ввожу

range("K2") 

за пределами с блоком я получаю ошибку во втором, третьем .... листов, но не в первой.

Любые советуют только приветствовать

С уважением

João

ответ

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

Смежные вопросы