2014-09-09 4 views
0

Я создал динамический диапазон имен на моем листе, который называется 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 
+0

Я не верю, что есть VBA для этого необходимо. http://www.techrepublic.com/blog/microsoft-office/two-ways-to-build-dynamic-charts-in-excel/ –

+0

ах. Я понимаю метод динамического диапазона. Хотя я надеялся, что просто могу ввести 1 динамический диапазон для всего графика. Но хорошо, мне нужно создать диапазон динамиков для каждой отдельной серии и оси. – DutchArjo

+0

Это помогает расширить диапазон данных для отдельных серий. Но не для добавления новых серий. Жаль, что возможность просто подключить данные диаграммы к динамическому именованному диапазону недоступна. – DutchArjo

ответ

0

Я не знаю, что я изменился, но у меня есть метод работы. Я добавил этот код в модуль:

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 
'========== 

, а затем в листе у меня есть этот сабвуфер:

Option Explicit 
Private Sub Worksheet_Change(ByVal myrange As range) 
Dim grafiekrange As range 

Set myrange = grafiekrange 

With ActiveSheet.ChartObjects("Grafiek 3").Activate 

ActiveChart.SetSourceData Source:=range("grafiekrange") 

End With 

End Sub 

И на листе у меня есть несколько именованных диапазонов из которых grafiekrange используется в настоящее время. это именованный диапазон имеет следующую формулу:

=VERSCHUIVING(Blad4!$A$1;0;0;AANTALARG(Blad4!$A:$A)+1;AANTAL.ALS(Blad4!$1:$1;"YTD*")+1)

где:

VERSCHUIVING = OFFSET()

AANTAL.ALS = COUNTIF

AANTALARG = COUNTA

И сейчас это работает.

Теперь у меня есть только найти решение для размещения диаграммы при каждом изменении (который входит уже в коде выше)

0

Я не могу поверить, что Вставить таблицу убивает формулы, но так или иначе.

Если ='blad1'!grafiekrange получает правильные данные диаграммы, а затем положить следующий макрос в модуль:

Sub setSelectedChartSourceData() 
Dim oChart As Chart 

On Error Resume Next 'If Selection is not the CharArea, then next line throws error. 

Set oChart = Selection.Parent 
oChart.SetSourceData Source:=Range("blad1!grafiekrange") 

On Error GoTo 0 'Set Error handling to default. 

End Sub 

Вы можете назначить сочетание клавиш для макроса. [Ctrl] + [Shift] + [D] для ex.

Теперь, если данные диаграммы и данные именованного диапазона изменены, выберите диаграмму и нажмите [Ctrl] + [Shift] + [D] или запустите макрос SetSelectedChartSourceData другим способом.

Привет

Axel

+0

извините. возможно, я, возможно, не прочитал предупреждающее сообщение должным образом. точное предупреждающее сообщение: «формулы в rowname будут удалены и преобразованы в статический текст». Теперь я преобразовал диапазон в таблицу, а затем попытался понять, что происходит. Я подключил график к таблице и сделал несколько вариантов. Ничего не произошло. Когда я снова проверил диапазон дат диаграммы, я увидел, что вместо таблицы был указан статический диапазон. – DutchArjo

+0

Извините, я не могу воспроизвести это поведение. Мой Excel - версия 2007. Ни одно сообщение не появляется, если я использую таблицу вставки с заполненным диапазоном или формулы или форматы уходит. Меняются только фоны ячеек. И если я создаю диаграмму из данных таблицы - конечно, она должна быть диаграммой всех данных таблицы, а затем вставлять данные в новые строки или столбцы, диаграмма также вставляет значения или серии. –

+0

Я пробовал несколько раз несколько вариантов, но никто из них не работает. Каждый раз диапазон преобразуется в «нормальный» диапазон (стиль R1K1). вместо названного диапазона или диапазона таблиц. Я преобразовал свой диапазон в таблицу, используя «insert table», а затем ввел именованный диапазон. Когда у меня уже была таблица, я изменил размер таблицы на «размер таблицы изменений», и там я вставил формулу динамического диапазона. Я надеялся, что таблица расширится, и диаграмма будет использовать всю область таблицы. Но опять же диапазон преобразуется в нормальный диапазон, а также диапазон диаграмм. Что здесь происходит? – DutchArjo

Смежные вопросы