Вопрос Связывание названия серии диаграмм с диапазоном через VBA


Я хотел бы связать имя серии диаграмм с диапазоном на моем листе, но не всю строку в этом диапазоне. Например, вместо привязки имени к ячейке, содержащей «201601», я хочу, чтобы имя серии было 2016. Я попытался использовать Left (cell, 4) при назначении имени, но это дает мне ошибку.

Текущий код VBA

Sub changeLinks()
For i = 1 To ActiveSheet.ChartObjects.Count
    ActiveSheet.ChartObjects(i).Chart.SeriesCollection(1).Name = "=Left(" & Range("P18").Address(, , , True) & ",4)"
    ActiveSheet.ChartObjects(i).Chart.SeriesCollection(2).Name = "=Left(" & Range("I18").Address(, , , True) & ",4)"
    ActiveSheet.ChartObjects(i).Chart.SeriesCollection(3).Name = "=Left(" & Range("B18").Address(, , , True) & ",4)"
Next i    
End Sub

Как я могу изменить свой код, чтобы сделать это?


2
2018-02-26 16:22


происхождения


Можете ли вы опубликовать свой VBA, который у вас есть сейчас, чтобы мы могли его отладить? - Jonno


ответы:


Когда вы звоните SeriesCollection.Name, то, что делает Excel, является обновление SERIES() функция, определяющая серию. SERIES() не может принимать функции для аргументов. Он может принимать только диапазон, именованный диапазон или строковый аргумент.

Вам нужно сделать это в два этапа, например:

Sub changeLinks()
Dim i&
Dim name1$, name2$, name3$

name1 = Left(Range("P18").Value, 4)
name2 = Left(Range("I18").Value, 4)
name3 = Left(Range("B18").Value, 4)

For i = 1 To ActiveSheet.ChartObjects.Count
    ActiveSheet.ChartObjects(i).Chart.SeriesCollection(1).Name = name1
    ActiveSheet.ChartObjects(i).Chart.SeriesCollection(2).Name = name2
    ActiveSheet.ChartObjects(i).Chart.SeriesCollection(3).Name = name3
Next i
End Sub

1
2018-02-26 16:59



Проблема с этим заключается в том, что имя серии статично. Если я изменил значение в ячейке, диаграмма также не обновится. Мне приходится менять около 100 графиков по 3 серии, поэтому я хочу сделать это на VBA. Но после этого я просто обновляю значения ячеек, чтобы диаграммы были динамическими - rblade
@rblade использует процедуру события для запуска макроса при изменении этих ячеек или использование другого диапазона, который использует формулы для получения нужного имени. - Kyle


Вам нужно поместить формулу в другую ячейку. Например, в P17 поместите эту формулу:

=LEFT(P18,4)

Затем используйте P17 как диапазон, содержащий имя серии (в диалоговом окне «Выбор данных»). Когда P18 изменится, формула в P17 изменится, и так будет имя серии в диаграмме.


0
2018-03-18 20:05