Как заставить VBA повторять создание серии для графа Excel до последней строки данных? - PullRequest
1 голос
/ 18 апреля 2019

Я пытаюсь заставить VBA автоматически создавать графики на основе столбцов в наборе данных. Количество строк зависит от того, в какие данные загружаются.

Я просто не могу заставить его правильно выбирать данные с помощью следующей функции, поскольку она работает, когда я вручную заполняю коллекцию Series.

Спасибо за любую помощь

Sub generate_PrimaryBubble()
Dim ochartObj As ChartObject
Dim oChart As Chart

Set ochartObj = ActiveSheet.ChartObjects.Add(Top:=100, Left:=200, Width:=500, Height:=300)
Set oChart = ochartObj.Chart
oChart.ChartType = xlBubble

Set CategoryRange = ActiveSheet.Range("B" & CStr(FirstRow) & ":B" & CStr(lastrow))
Set ItemEfficiencyRange = ActiveSheet.Range("I" & CStr(FirstRow) & ":I" & CStr(lastrow))
Set TotalUPCRange = ActiveSheet.Range("I" & CStr(FirstRow) & ":I" & CStr(lastrow))

    oChart.SetSourceData Source:=CategoryRange

'SeriesCollection Counting

    Dim i As Long
    lastrow = Range("N" & Rows.Count).End(xlUp).Row

    MsgBox "Last Row: " & lastrow & vbNewLine


'SeriesCollection Creation

For i = 2 To lastrow

    oChart.SeriesCollection(i).XValues = Range("N" & i)
    oChart.SeriesCollection(i).Values = Range("H" & i)
    oChart.SeriesCollection(i).Name = Range("B" & i)
    oChart.SeriesCollection(i).BubbleSizes = 1
Next i




'Graph Labels
    oChart.Axes(xlCategory).HasTitle = True
    oChart.Axes(xlCategory).AxisTitle.Caption = "Efficiency"
    oChart.Axes(xlValue).HasTitle = True
    oChart.Axes(xlValue).AxisTitle.Caption = "Total #"

'Variable MaximumScales
    oChart.Axes(xlValue).MaximumScale = 1000000
    oChart.Axes(xlValue).MinimumScale = 0
    oChart.Axes(xlPrimary).MaximumScale = 1
    oChart.Axes(xlPrimary).MinimumScale = 0
    oChart.Axes(xlPrimary).TickLabels.NumberFormat = "0%"


End Sub

1 Ответ

0 голосов
/ 18 апреля 2019

Попробуйте создать новую серию в цикле for. Вам нужно добавить серию, прежде чем вы сможете установить ее значение и значение xvalue. У вас есть цикл for, в котором вы устанавливаете значение нескольких рядов; поэтому вам нужно будет создать несколько серий, что лучше всего сделать в начале цикла for:

Sub generate_PrimaryBubble()
    Dim ochartObj As ChartObject
    Dim oChart As Chart

    Set ochartObj = ActiveSheet.ChartObjects.Add(Top:=100, Left:=200, Width:=500, Height:=300)
    Set oChart = ochartObj.Chart
    oChart.ChartType = xlBubble

    Set CategoryRange = ActiveSheet.Range("B" & CStr(FirstRow) & ":B" & CStr(lastrow))
    Set ItemEfficiencyRange = ActiveSheet.Range("I" & CStr(FirstRow) & ":I" & CStr(lastrow))
    Set TotalUPCRange = ActiveSheet.Range("I" & CStr(FirstRow) & ":I" & CStr(lastrow))

    oChart.SetSourceData Source:=CategoryRange

'SeriesCollection Counting

    Dim i As Long
    lastrow = Range("N" & Rows.Count).End(xlUp).Row

    MsgBox "Last Row: " & lastrow & vbNewLine

'SeriesCollection Creation
    For i = 1 To lastrow - 1
        oChart.SeriesCollection.NewSeries
        oChart.SeriesCollection(i).XValues = Range("N" & i + 1)
        oChart.SeriesCollection(i).Values = Range("H" & i + 1)
        oChart.SeriesCollection(i).Name = Range("B" & i + 1)
        oChart.SeriesCollection(i).BubbleSizes = 1
        Next i

'Graph Labels
        oChart.Axes(xlCategory).HasTitle = True
        oChart.Axes(xlCategory).AxisTitle.Caption = "Efficiency"
        oChart.Axes(xlValue).HasTitle = True
        oChart.Axes(xlValue).AxisTitle.Caption = "Total #"

'Variable MaximumScales
        oChart.Axes(xlValue).MaximumScale = 1000000
        oChart.Axes(xlValue).MinimumScale = 0
        oChart.Axes(xlPrimary).MaximumScale = 1
        oChart.Axes(xlPrimary).MinimumScale = 0
        oChart.Axes(xlPrimary).TickLabels.NumberFormat = "0%"

End Sub
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...