Создать гистограмму с несколькими рядами без использования Range - PullRequest
0 голосов
/ 05 октября 2019

Мне интересно, есть ли способ написать макрос, который создает гистограмму с несколькими рядами (в зависимости от ввода) без использования Range? Чтобы заставить его работать на данный момент, мне нужно выписать вывод на листе, прежде чем я смогу его использовать. Это кажется невероятно ненужным. Есть ли альтернативный способ?

Sub CreateBarGraph() 

Set table = Database_U.ListObjects("Table_U") '


Dim ColumnProjektID As String, ColumnVarde As String

Dim Varde As Variant, ProjektID As Variant

ColumnProjektID = "ProjektID"
ColumnVarde = "Varde"

Dim sheet As Worksheet
Set sheet = GraphSheet

Dim cht As ChartObject

Dim i As Integer
i = 1

For Each currentRow In table.ListRows

   'The return value consist of a name with letters
    Set ProjektID = RetrieveProjektID(currentRow, ColumnProjektID)    
    GraphSheet.Cells(i, 2) = ProjektID

    'The return value consist of a digit/number
    Set Varde = RetrieveVarde(currentRow, ColumnVarde)     
    GraphSheet.Cells(i, 3) = Varde

    i = i + 1

Next


Set cht = GraphSheet.ChartObjects.Add(Left:=20, Width:=800, Top:=20, Height:=500)

Dim rng As range

'1/2 of the below feels like a waste of space. I would like to find a
'way to add the source of the data (and create multiple series) 
'without writing out the values on a sheet

For j = 1 To i
    Set rng = GraphSheet.range(Cells(i, 2), Cells(i, 3))
    cht.chart.SeriesCollection.Add Source:=rng
Next i





 End Sub

Есть ли альтернативный способ получить тот же результат? Благодарен за помощь!

1 Ответ

1 голос
/ 05 октября 2019

A ChartObject - это в основном Shape, который оборачивает Chart . Вам необходимо добавить NewSeries к SeriesCollection диаграммы, содержащейся в ChartObject .

Сокращенный код

ActiveSheet.ChartObjects(1).Chart.SeriesCollection.NewSeries.Values = Array(10, 5, 21, 54, 76, 12)

Демонстрация

Sub Test()
    Dim ChartObject As ChartObject
    Dim Chart As Chart

    Set ChartObject = ActiveSheet.ChartObjects(1)
    Set Chart = ChartObject.Chart

    Dim Series As Series
    Set Series = Chart.SeriesCollection.NewSeries

    Series.Values = Array(10, 5, 21, 54, 76, 12)

End Sub

Вот как вы можете отформатировать серию 'Color the Line Series.Format.Line.ForeColor.RGB = vbRed' Раскрасить серию внутреннего заполнения. Формат. Fill.ForeColor.RGB = vbMagenta

Приложение

Вы можете назначить массив названий категорий следующим образом:

Dim Axis As Axis
Set Axis = Chart.Axes(xlCategory)
Axis.CategoryNames = myArray2
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...