Название диаграммы VBA не заполняется

У меня есть список данных, и мне нужно создать диаграмму для каждых двух строк и указать заголовок диаграммы, связанный с 1-й строкой. Пример данных:

Пример

И так далее.

Код, который я использую для создания диаграмм:

Sub loopChart()

Dim mychart As Chart
Dim myRange As Range
Dim c As Integer
Dim r As Integer
Dim s As Integer
Dim ttl As String




r = 2
While r <= 10 '1=dataSource1, 4=dataSource2, 7=dataSource3
'set data source for the next chart

With Worksheets("Sheet9")
    Set myRange = .Range(.Cells(r, 2), .Cells(r + 1, 14))

End With
'create chart
Sheets("Chart").Select
    ActiveSheet.Shapes.AddChart.Select

    With ActiveChart
         ttl = Range("A" & r)
        .ChartType = xlLineMarkers 'xlLine
        .SetSourceData Source:=myRange, PlotBy:=xlRows  'sets source data for graph including labels
        .SetElement (msoElementLegendRight) 'including legend
        .HasTitle = True
        'dimentions & location:
        .Parent.Top = 244  'defines the coordinates of the top of the chart
        '.Parent.Left = r * 150  'defines the coordinates for the left side of the chart
        .Parent.Height = 200
        .Parent.Width = 300
        .ChartTitle.Formula = ttl
    End With

r = r + 2
Wend

End Sub

Таким образом, первая сгенерированная диаграмма должна получить заголовок в строке 2, следующая диаграмма должна иметь заголовок в строке 4... Я всегда получаю заголовок диаграммы на первой сгенерированной диаграмме, но не на других диаграммах. Может ли кто-нибудь помочь мне в этом?


person N. Painter    schedule 22.05.2018    source источник


Ответы (2)


Пожалуйста, исправьте ниже.

ttl = Range("A" & r)

to

ttl = Worksheets("Sheet9").Range("A" & r).Value
person Dy.Lee    schedule 22.05.2018

Я думаю, что ответ @Dy.Lee добьется цели, но пойдет немного дальше:

Старайтесь не использовать .select

Предлагаемый обходной путь:

Sub loopChart()

Dim Ch As Chart
Dim Sh1 As Worksheet: Set Sh1 = Sheets("Sheet9")
Dim Sh2 As Worksheet: Set Sh2 = Sheets("Chart")
Dim L As Integer

L = 0

For i = 2 To 18 Step 2
    Set Ch = Sh2.Shapes.AddChart.Chart
    Ch.SetSourceData Sh1.Range(Sh1.Cells(i, 2), Sh1.Cells(i + 1, 14))
    Ch.ChartType = xlLineMarkers
    Ch.SetElement (msoElementLegendRight)
    Ch.HasTitle = True
    Ch.Parent.Top = 244
    Ch.Parent.Height = 200
    Ch.Parent.Width = 300
    Ch.Parent.Left = L
    Ch.ChartTitle.Caption = Sh1.Cells(i, 1).Value
    L = L + 300
Next i

End Sub

Ваш код будет создавать каждый график в одном и том же месте, поэтому вы увидите только один (последний), следовательно, строку Ch.Parent.Left со значением переменной.

person J.Doe    schedule 22.05.2018