Я создал динамический диапазон имен на моем листе, который называется grafiekrange (chartrange in голландский). I Создал диаграмму и где вы выбираете диапазон данных диаграммы, я набрал: ='blad1'!grafiekrange
, потому что blad1 - это имя рабочего листа, в котором находится диапазон имен.изменение диаграммы диапазон данных при изменении диапазона динамических данных?
Я нажимаю ok, и диаграмма соединена с диапазоном ячеек, на которые в данный момент ссылается имя. Когда диапазон от диапазона имен расширяется, диапазон данных для диаграммы все тот же. Итак, когда я подключаю диаграмму к , имя range, excel каким-то образом преобразует диапазон имен в жестко закодированный диапазон ячеек; например $A$1:$H$10
вместо 'blad1'!grafiekrange
.
Я нашел некоторый код vba, который является чем-то вроде обходного пути, но это обходное решение удаляет диаграмму и создает новую при каждом изменении на листе.
это код листа:
Option Explicit
Private Sub Worksheet_Change(ByVal Target As Range)
With ActiveSheet
.ChartObjects.Delete
End With
Call CreateChart
End Sub
это код в модуле:
Option Explicit
'=========================================================================
Sub CreateChart()
Dim objChart As ChartObject
Dim myChtRange As Range
Dim myDataRange As Range
With ActiveSheet
' What range should chart cover
Set myChtRange = Range("chtArea") 'Range("G2:Q30")
' What range contains data for chart
Set myDataRange = Range("grafiekrange")
' Cover chart range with chart
Set objChart = .ChartObjects.Add(_
Left:=myChtRange.Left, Top:=myChtRange.Top, _
Width:=myChtRange.Width, Height:=myChtRange.Height)
' Put all the right stuff in the chart
With objChart.Chart
.ChartArea.AutoScaleFont = False
.ChartType = xlLine
.SetSourceData Source:=myDataRange, PlotBy:=xlRows
.HasTitle = True
.ChartTitle.Characters.Text = "YTD Afzetontwikkeling (cumulatief) bij AS Watson (KV+TP)"
.ChartTitle.Font.Bold = True
.ChartTitle.Font.Size = 12
With .Axes(xlValue, xlPrimary)
.HasTitle = False
End With
End With
End With
End Sub
'=========================================================================
Создание новой диаграммы на каждом изменении не совсем то, что Я хотел, но если он делает то, что я хочу, неважно, как это работает. Однако, я хотел бы иметь 2 серии с определенным форматированием. Первые 2 серии должны иметь тире. Я использовал макрорекордер, чтобы посмотреть, как это работает, и попытался реализовать это в коде выше. Но у меня не было рабочего кода.
это код записи макросов возвращается:
Sub Macro3()
'
' Macro3 Macro
'
'
ActiveSheet.ChartObjects("Grafiek 29").Activate
ActiveChart.Axes(xlValue).MajorGridlines.Select
ActiveChart.SeriesCollection(1).Select
With Selection.Format.Line
.Visible = msoTrue
.DashStyle = msoLineDash
End With
End Sub
Мой вопрос: вы можете либо помочь мне реализовать ряд форматирования в коде выше, или предоставить мне код, который просто обновляет диапазон данных на каждое изменение (для меня это звучит более эффективно, но я не знаю, как это сделать). большое спасибо заранее.
Я пытался что-то сам, но это не данные диаграммы и каким-то образом, теперь возвращает ошибку, когда я первый не сделал:
Option Explicit
Private Sub Worksheet_Change(ByVal myrange As Range)
Set myrange = grafiekrange
With ActiveSheet.ChartObjects("Grafiek 35")
ActiveChart.SetSourceData Source:="myrange"
End With
End Sub
Я не верю, что есть VBA для этого необходимо. http://www.techrepublic.com/blog/microsoft-office/two-ways-to-build-dynamic-charts-in-excel/ –
ах. Я понимаю метод динамического диапазона. Хотя я надеялся, что просто могу ввести 1 динамический диапазон для всего графика. Но хорошо, мне нужно создать диапазон динамиков для каждой отдельной серии и оси. – DutchArjo
Это помогает расширить диапазон данных для отдельных серий. Но не для добавления новых серий. Жаль, что возможность просто подключить данные диаграммы к динамическому именованному диапазону недоступна. – DutchArjo