Поскольку Александра SM со вторника на форуме нет, позволю себе подкорректировать его прекрасное творение согласно новым хотелкам 1. Код (исходный текст) на втором листе вообще убейте весь - в данном случае изменение диаграммы происходит по изменению данных на Лист1 2. В коде на Лист1 в строке [vba]
Код
Set Chart1 = Me.ChartObjects(1).Chart
[/vba] замените "Me" на "Лист2" получится [vba]
Код
Set Chart1 = Лист2.ChartObjects(1).Chart
[/vba]
Поскольку Александра SM со вторника на форуме нет, позволю себе подкорректировать его прекрасное творение согласно новым хотелкам 1. Код (исходный текст) на втором листе вообще убейте весь - в данном случае изменение диаграммы происходит по изменению данных на Лист1 2. В коде на Лист1 в строке [vba]
Спасибо, на втором листе изменяется, а вот на первом теперь перестала! Может можно написать что-то универсальное для всей книги, чтобы куда не вставь, везде обновлялась!????
Спасибо, на втором листе изменяется, а вот на первом теперь перестала! Может можно написать что-то универсальное для всей книги, чтобы куда не вставь, везде обновлялась!????NIC
Ловите, но это не правильно - на листах могут быть еще диаграммы. И вообще - проще определиться с листом для диаграммы, а потом уже в макросе его прописать [vba]
Код
Private Sub Worksheet_Change(ByVal Target As Range) Dim Chart1 As Chart, Series1 As Series, RngX As Range, RngY As Range Dim ChartName As String, Prompt As String, S() As String Dim i For i = 1 To Worksheets.Count On Error Resume Next Set Chart1 = Worksheets(i).ChartObjects(1).Chart On Error GoTo 0 If Chart1 Is Nothing Then GoTo A With Chart1 Set Series1 = .SeriesCollection(1) S = Split(Series1.Formula, ",") Set RngX = Range(S(1)) Set RngY = Range(S(2)) If Not Intersect(Target, Union(RngX, RngY)) Is Nothing Then .Axes(xlCategory).MinimumScale = WorksheetFunction.Min(RngX) .Axes(xlValue).MinimumScale = WorksheetFunction.Min(RngY) .Axes(xlCategory).MaximumScale = WorksheetFunction.Max(RngX) .Axes(xlValue).MaximumScale = WorksheetFunction.Max(RngY) End If End With A: Next i End Sub
[/vba]
Ловите, но это не правильно - на листах могут быть еще диаграммы. И вообще - проще определиться с листом для диаграммы, а потом уже в макросе его прописать [vba]
Код
Private Sub Worksheet_Change(ByVal Target As Range) Dim Chart1 As Chart, Series1 As Series, RngX As Range, RngY As Range Dim ChartName As String, Prompt As String, S() As String Dim i For i = 1 To Worksheets.Count On Error Resume Next Set Chart1 = Worksheets(i).ChartObjects(1).Chart On Error GoTo 0 If Chart1 Is Nothing Then GoTo A With Chart1 Set Series1 = .SeriesCollection(1) S = Split(Series1.Formula, ",") Set RngX = Range(S(1)) Set RngY = Range(S(2)) If Not Intersect(Target, Union(RngX, RngY)) Is Nothing Then .Axes(xlCategory).MinimumScale = WorksheetFunction.Min(RngX) .Axes(xlValue).MinimumScale = WorksheetFunction.Min(RngY) .Axes(xlCategory).MaximumScale = WorksheetFunction.Max(RngX) .Axes(xlValue).MaximumScale = WorksheetFunction.Max(RngY) End If End With A: Next i End Sub
но это не правильно - на листах могут быть еще диаграммы
Так она и есть, ерунда получилась!!! а куда в код написать все названия листов в которые я скопирую исходную диаграмму, чтобы они менялись вместе с исходной!???
Цитата (_Boroda_)
но это не правильно - на листах могут быть еще диаграммы
Так она и есть, ерунда получилась!!! а куда в код написать все названия листов в которые я скопирую исходную диаграмму, чтобы они менялись вместе с исходной!???NIC
Прилипил файл, хотелось бы чтобы диаграммы на "Листе1" и на "Листе2" (4 одинаковые диаграммы) изменяли начало и конец в зависимости от значений! Пока удалось добиться обновления либо на 1-ом листе либо на 2-ом! ко всей книге применить нельзя так как будут другие графики! Помогите пожалуйста, оч надо! Заранее спасибО!!!!
Прилипил файл, хотелось бы чтобы диаграммы на "Листе1" и на "Листе2" (4 одинаковые диаграммы) изменяли начало и конец в зависимости от значений! Пока удалось добиться обновления либо на 1-ом листе либо на 2-ом! ко всей книге применить нельзя так как будут другие графики! Помогите пожалуйста, оч надо! Заранее спасибО!!!!NIC
Для оформления протокола, долго объяснять, просто там бывают три варианта, для этого и три диаграммы на одном листе, а на первом вносятся данные! ну типо вот для этого!!! Это реально сделать, а то я с VBA не дружу!???
Для оформления протокола, долго объяснять, просто там бывают три варианта, для этого и три диаграммы на одном листе, а на первом вносятся данные! ну типо вот для этого!!! Это реально сделать, а то я с VBA не дружу!??? NIC
Супер, получилось! Но вот только беда, этот файл был для примера, а в моём, который я не могу, к сожалению, приклеить, что-то не выходит "каменный цветок" там присутствует 16 диаграмм, 4 раза по четыре одинаковые, не хотят тут меняться, может ли это быть из-за одинакового имени диаграмм??? на одном листе все три диаграммы имеют одно название! или может я что-то не дописал, где-то? СПАСИБО!!!
Супер, получилось! Но вот только беда, этот файл был для примера, а в моём, который я не могу, к сожалению, приклеить, что-то не выходит "каменный цветок" там присутствует 16 диаграмм, 4 раза по четыре одинаковые, не хотят тут меняться, может ли это быть из-за одинакового имени диаграмм??? на одном листе все три диаграммы имеют одно название! или может я что-то не дописал, где-то? СПАСИБО!!!NIC
Сообщение отредактировал NIC - Воскресенье, 21.04.2013, 21:27
может ли это быть из-за одинакового имени диаграмм??? на одном листе все три диаграммы имеют одно название!
Да, на одном листе имена диаграмм должны быть разными. Подправьте код: [vba]
Код
ReDim ChartArray(1 To 4) For J = 1 To 4 Set ChartArray(J) = New MyChartObj Next On Error Resume Next Set ChartArray(1).NewChartObj = Sheets("Лист1").ChartObjects("Диаграмма 1") . . . . . . . . . . . . .
[/vba] 4 - замените - на 16. Скопировав, добавьте еще 12 строк Set ChartAr.... , и замените на свои названия листов и диаграмм.
Цитата (NIC)
может ли это быть из-за одинакового имени диаграмм??? на одном листе все три диаграммы имеют одно название!
Да, на одном листе имена диаграмм должны быть разными. Подправьте код: [vba]
Код
ReDim ChartArray(1 To 4) For J = 1 To 4 Set ChartArray(J) = New MyChartObj Next On Error Resume Next Set ChartArray(1).NewChartObj = Sheets("Лист1").ChartObjects("Диаграмма 1") . . . . . . . . . . . . .
[/vba] 4 - замените - на 16. Скопировав, добавьте еще 12 строк Set ChartAr.... , и замените на свои названия листов и диаграмм.SM
Set ChartArray(1).NewChartObj = Sheets("Гр.№1")...
[/vba] Поэкспериментируйте с переименованием, только (сначала) не на своём большом, а на предыдущем, маленьком файле. Переименовали, изменили текст кода, и запустите макрос 'ArrayOfChart'
Нет, вот так: [vba]
Код
Set ChartArray(1).NewChartObj = Sheets("Гр.№1")...
[/vba] Поэкспериментируйте с переименованием, только (сначала) не на своём большом, а на предыдущем, маленьком файле. Переименовали, изменили текст кода, и запустите макрос 'ArrayOfChart'SM
Excel изощрён, но не злонамерен
Сообщение отредактировал SM - Понедельник, 22.04.2013, 00:51
или ??? непонял немного! просто имена листов будут меняться!!!
В этом случае лучше ссылаться не на Имя_листа (Name), а на Имя_модуля_листа (CodeName), в Вашем большом файле: Имя_листа == "Гр.№1" Имя_модуля_листа == Лист1 Тогда строка кода должна быть такой: [vba]
Код
Set ChartArray(1).NewChartObj = Лист1.ChartObjects("Диаграмма 8")
[/vba]
Цитата (NIC)
или ??? непонял немного! просто имена листов будут меняться!!!
В этом случае лучше ссылаться не на Имя_листа (Name), а на Имя_модуля_листа (CodeName), в Вашем большом файле: Имя_листа == "Гр.№1" Имя_модуля_листа == Лист1 Тогда строка кода должна быть такой: [vba]
Код
Set ChartArray(1).NewChartObj = Лист1.ChartObjects("Диаграмма 8")