Я действительно сразу записал макрос, а потом добавил переменную в имя листа.
Я попробывал так, как вы сказали, но проблема не решилась!
Макрос работает через раз...
В документе на листе всего 7 диаграмм, 4 из которых макрос заполняет правильно, 1 - только на-половину ( в ней 2 ряда, изменяется только один, причем второй), а на двух диаграммах Ексель постоянно ругается ( нельзя установить свойство ... класса Series ).
Что это может быть и что с этим делать?
А по поводу индекса диагамм - после повторной прогонки макроса, Ексель выдает сообщение, что объект не найден, хотя во время первого запуска макроса он всё находил!
Значит все-таки работает... в таком случае проверяйте правильность составляемой формулы... может быть k меняет значение так, что формируется имя листа, которого нет в книге...
Может быть стоит решать не через подстановку формул, а присвоением нужных объектов Range?
Я не уверен, но может быть при переопределении значений Series их индексы также переопределяются, и даже добавляются. Т.е. возможно старые делаются недоступными и скрытыми, а новые индексы растут. Попробуйте проверить свойство Count до и после отработки макроса. Честно говоря, я с графиками почти не работаю, поэтому... Извините, мало чем могу быть более полезным.
Проверял, используя Step Into, значения k - всё правильно!
Также использовал Range вместо формул - результат тот же...
А вы не знаете случайно, есть ли автозамена в рядах графиков? А то таким образом всё очень сильно упрощается!
Т.е. Вы уверены, что имя листа и адреса областей серий в формуле формируется абсолютно правильно?
Опять не понял по поводу "автозамена в рядах графиков" - что Вы имеете в виду? Во всяком случае, определенно можно сказать, что Excel не производит поиск/замену в ссылках параметров графиков, и не может сделать поиск/замену какой-либо строки/подстроки в базе данных всего документа (включая все данные всех объектов), подобно тому, как это можно сделать в AutoCAD. Excel делает поиск только в пределах явно указанного объекта, где этот поиск возможнен - лист, группа листов, область листа, группа областей листа/листов, и т.п.
Но я предложил бы Вам еще попробовать перебирать элементы коллекции SeriesCollection в цикле For each, вместо указания конкретных их номеров - это может действительно упростить работу, если сделать, например, так (с помощью функции Replace):
Вот мой примерчик, он на 100% рабочий - меняются диапазоны одной конкретной диаграммы на одном и том же листе. Переделывайте как вам надо, только не говорите, что пример нерабочий - надо отлаживать свои программки.
Sub UpdateCharts()
Const interval = 23
Dim sh As Worksheet
Dim i As Integer
Set sh = ThisWorkbook.Worksheets("Курсы валют"
sh.Activate
i = 1655
Do While Not sh.Cells(i, 1).Value = Empty
i = i + 1
Loop
ActiveSheet.ChartObjects(1).Activate
ActiveChart.ChartArea.Select
ActiveChart.SeriesCollection(1).XValues = "='Курсы валют'!R" & CStr(i - interval) & "C1:R" & CStr(i - 1) & "C1"
ActiveChart.SeriesCollection(1).Values = "='Курсы валют'!R" & CStr(i - interval) & "C2:R" & CStr(i - 1) & "C2"
ActiveChart.SeriesCollection(2).XValues = "='Курсы валют'!R" & CStr(i - interval) & "C1:R" & CStr(i - 1) & "C1"
ActiveChart.SeriesCollection(2).Values = "='Курсы валют'!R" & CStr(i - interval) & "C3:R" & CStr(i - 1) & "C3"
ActiveSheet.ChartObjects(2).Activate
ActiveChart.ChartArea.Select
ActiveChart.SeriesCollection(1).XValues = "='Курсы валют'!R" & CStr(i - interval) & "C1:R" & CStr(i - 1) & "C1"
ActiveChart.SeriesCollection(1).Values = "='Курсы валют'!R" & CStr(i - interval) & "C4:R" & CStr(i - 1) & "C4"
sh.Cells(i, 2).Select
Set sh = Nothing
End Sub
Сори, неточность.. у меня меняются две диаграммы. Но не толко в этом суть. Надо на самом деле в случае demtruder перебирать все диаграммы на новом листе for each ... in ... и какими станут новый индексы диаграмм - это дело excel. Они присваиваются не случайными ислами. Советую в for each перепроверять диаграммы не по индексу, а по значению например заголовка (если заголовки и demtruder одинаковые).
Проверил работу Replace для SeriesCollection - Ексель ругается и говорит, что этот метод не поддерживается данным объектом
Я все равно не понимаю, почему некоторые ряды Ексель не видит, что-ли?
И что значит невозможность установления значения Value, Name, XValue для Series?