2014-05-30 2 views
1

Я пытаюсь построить линейный график на сводном листе на основе динамического количества строк на листе отслеживания веса (т.е. каждый день добавляю еще одну строку данных)Построение линейного графика с динамическим числом строк данных

Я пытаюсь сделать мой график таким же, как пример (такие же цвета и т. Д.). Прямо сейчас, мой код компилируется, но график не появляется нигде.

i am trying to make a line graph on the summary sheet based on a dynamic number of lines on the weight tracking sheet (i.e. i add more data every day)

i am trying to make my line graph look exactly like the example (same colors etc.)

Вот в электронной таблице https://drive.google.com/file/d/0B1GLuBx-ROnhSnJpdDRFTFVUbDA/edit?usp=sharing

Private Sub WeightTrackingChart() 

    'variable declaration 
    Dim i As Long 
    Dim LastRow As Long 
    Dim WTchart As Shape 
    Dim ws As Worksheet 

    'Find the last used row 
    LastRow = Sheets("Weight Tracking").Range("B3").End(xlUp).Row 

    'Looping from fifth row till last row which has the data 
    For i = 6 To LastRow 
     'Prints chart to Summary sheet 
     Set ws = Sheets("Weight Tracking") 

     'deletes old charts 
     ' ws.Shapes("WTchart").Delete 

     'Adds new chart to the sheet 
     Set WTchart = ws.Shapes.AddChart(xlLine, 15, 750, 500, 400) 

     'Sets chart name 
     WTchart.Name = "WTchart" 

     'now the line chart is added...setting its data source here 
     With Sheets("Weight Tracking") 
      WTchart.SetSourceData Source:=.Range(.Cells(i, 1), .Cells(i, "F")) 
     End With 


     Next 

End Sub 

ответ

1

Во-первых, я не большой поклонник использования Cells (х, у), это просто этот личный вопрос так вы увидите, что я написал это, как я чувствую себя комфортно, но не стесняйтесь приспосабливаться по своему усмотрению. Кажется, что ваш цикл создавал много диаграмм вместо добавления новой серии в существующую. Для этого я изменил, где начинается цикл. Кроме того, я также активирую диаграмму, чтобы использовать ActiveChart в моем коде. Я не знаю, как обойти это, если кто-то другой сделает это, было бы здорово учиться.

Еще одно примечание для дальнейшего использования, убедитесь, что вы правильно зацикливаете. Когда вы устанавливаете цикл для запуска до последней строки, вы на самом деле говорите, что выполняете 7 раз, а не только 5. Кроме того, это должна быть длина для перехода к данным, а не к циклу (серия для создания). Для длины я просто беру разницу между вашей первой строкой и последней строкой и скажу, чтобы она смещалась так далеко.

В любом случае, я надеюсь, что это поможет вам. Это отлично работало для меня.

Private Sub WeightTrackingChart() 

    'variable declaration 
    Dim i As Long 
    Dim LastRow As Long 
    Dim WTchart As Shape 
    Dim ws As Worksheet 

    'Find the last used row 
    LastRow = Sheets("Weight Tracking").Range("B3").End(xlDown).Row 
    Length = LastRow - Sheets("Weight Tracking").Range("B3").Row 

     'Prints chart to Summary sheet 
     Set ws = Sheets("Weight Tracking") 

     'deletes old charts 
     ' ws.Shapes("WTchart").Delete 

     'Adds new chart to the sheet 
     Set WTchart = ws.Shapes.AddChart(xlLine, 15, 150, 500, 400) 

     'Sets chart name 
     WTchart.Name = "WTchart" 

     'now the line chart is added...setting its data source here 

     With Sheets("Weight Tracking") 

      'Looping from fifth row till last row which has the data 
      For i = 0 To 4 
       WTchart.Select 
       ActiveChart.SeriesCollection.NewSeries 
       ActiveChart.SeriesCollection(i + 1).Name = .Range("B2").Offset(0, i + 1) 
       ActiveChart.SeriesCollection(i + 1).Values = Range(.Range("B2").Offset(1, i + 1), .Range("B2").Offset(Length + 1, i + 1)) 
       ActiveChart.SeriesCollection(i + 1).XValues = Range(.Range("B3"), .Range("B3").Offset(Length, 0)) 
      Next 
     End With 
End Sub 

Главное предназначение для размещения электронных таблиц на Google Диске упростило мою жизнь.

+0

спасибо очень много, это прекрасный. этот код делает гораздо больше смысла, чем мой оригинальный код. – user3579146

+0

Есть ли простой способ изменить цвета каждой строки? Я пробовал ActiveChart.SeriesCollection (1) .Line.Color = «красный» и несколько других вещей, которые я использовал раньше, но получаю «ошибка времени выполнения 438: объект не поддерживает это свойство или ошибку метода» – user3579146

+0

Попробуйте этот элемент ActiveChart.SeriesCollection (i + 1) .Format.Line.ForeColor.RGB = RGB (245, 25, 93) –

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