Excel VBA для l oop ошибка 450 в создании SeriesCollection для диаграммы - PullRequest
0 голосов
/ 20 февраля 2020

Я новичок в VBA и хочу определить серии для диаграммы. Вот код

For i = 2 To lsrw (last row in my code)

    'Define the series for the chart in case of empty series


        ActiveChart.SeriesCollection.NewSeries
        ActiveChart.SeriesCollection(sc).Name = sh.Range("J" & i).Value

        ActiveChart.SeriesCollection(sc).XValues = _
        Array(sh.Range("A" & i), sh.Range("A" & i))

        ActiveChart.SeriesCollection(sc).Values = _
        Array(sh.Range("K" & i), sh.Range("L" & i))

sc=sc+1
Next

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

Дело в том, что размер моего набора данных время от времени меняется, когда я делаю запрос SQL перед его построением.

https://i.stack.imgur.com/vvqHV.png

РЕДАКТИРОВАТЬ: проблема решена, но теперь она появляется в другом месте (ошибка 1004):

'For j = 3 To 20
'
'    If sh.Cells(lstrow, j).Value <> 0 Then
'    ActiveChart.SeriesCollection.NewSeries
'    ActiveChart.SeriesCollection(sc).Name = sh.Cells(lstrow - 1, j).Value
'
'    ActiveChart.SeriesCollection(sc).XValues = _
'    Array(sh.Range("A2"), sh.Range("A" & lsrw))
'
'    ActiveChart.SeriesCollection(sc).Values = _
'    Array(sh.Cells(lstrow, j).Value, sh.Cells(lstrow, j).Value)
'    End If
'
'    sc = sc + 1
'    ActiveChart.SeriesCollection(sf).AxisGroup = xlPrimary
'
'Next

Когда я хочу построить горизонтальный линии на том же графике.

Также здесь, когда я хочу изменить внешний вид графика:

For Each chrt In sh.ChartObjects
        chrt.chart.ChartArea.Font.Size = 9
        chrt.chart.ChartArea.Font.Name = "Cambria"
        chrt.chart.ChartArea.Border.LineStyle = xlNone
        chrt.chart.Axes(xlValue).MinimumScale = 0
        chrt.chart.Axes(xlValue).MaximumScale = yMax + 50
        chrt.chart.Axes(xlCategory).MinimumScale = xMin - 1
        chrt.chart.Axes(xlCategory).MaximumScale = xMax + 1
        chrt.chart.HasAxis(xlCategory) = False
        chrt.chart.Axes(xlCategory).Width = 400
        chrt.chart.Axes(xlValue).HasTitle = True
        chrt.chart.Axes(xlValue).AxisTitle.Text = "Depth in m"

Next chrt
...