Excel - запуск модуля при изменении графика?
Модератор: Naeel Maqsudov
Подскажите пожалуйста каким образом можна заставить выполнятся модуль VBA каждый раз при изменении графика (обьекта Chart) если например я меняю масштаб оси или меняю на графике обьект TextBox - должен запуститься модуль. То есть как можно обработать такое событие? (В стандартных событиях обьекта Chart такого события нет)
- Naeel Maqsudov
- Сообщения: 2570
- Зарегистрирован: 20 фев 2004, 19:17
- Откуда: Moscow, Russia
- Контактная информация:
Вот. А нестандартных событий не бывает. Т.е. никак.(В стандартных событиях обьекта Chart такого события нет)
А зачем?
например: я привязал TextBox к точке на графике, причем сделал это програмно, теперь пользователь захотел изменить масштаб оси и мне нужно этот TextBox перестроить - как мне зафиксировать такое событие? Может это можно сделать как-то иначе? Подскажите
- Naeel Maqsudov
- Сообщения: 2570
- Зарегистрирован: 20 фев 2004, 19:17
- Откуда: Moscow, Russia
- Контактная информация:
У Вас на рабочем листе лижит Chart, а поверх него TextBox (именно элемент управления TextBox, или автофигура TextBox)?
Хотя, это не важно. В любом случае нельзя.
Предположим, что скорее всего имеется в виду автофигура.
Т.е. наверное Вы просто хотите к точке на графике прицепить пометку со статическим текстом, и чтобы она за точкой бегала.
Так нет ничего проще. Щелкните на точке графика так, чтобы выделилась не серия данных, а сама эта точка. Потом сделайте на ней двойной щелчок. Вывалится диалог "Format Data Point". Идите на закладку "Data Labels" и включите там Sow Label.
Теперь в появившуюся метку впишите что надо, отформатируйте, поверните под нужным углом и наслаждайтесь.
Хотя, это не важно. В любом случае нельзя.
Предположим, что скорее всего имеется в виду автофигура.
Т.е. наверное Вы просто хотите к точке на графике прицепить пометку со статическим текстом, и чтобы она за точкой бегала.
Так нет ничего проще. Щелкните на точке графика так, чтобы выделилась не серия данных, а сама эта точка. Потом сделайте на ней двойной щелчок. Вывалится диалог "Format Data Point". Идите на закладку "Data Labels" и включите там Sow Label.
Теперь в появившуюся метку впишите что надо, отформатируйте, поверните под нужным углом и наслаждайтесь.
На самом деле не все так просто: на счет TextBox это был упрощеный пример, на самом деле есть нарисованая вторая ось X c нарисоваными делениями и значениями к ним, причем это все привязано к координатам на листе примерно таким образом
Width = (ActiveChart.Axes(xlCategory, xlPrimary).Width)
Height = (ActiveChart.Axes(xlValue, xlPrimary).Height)
Left = (ActiveChart.Axes(xlCategory, xlPrimary).Left)
Top = (ActiveChart.Axes(xlValue, xlPrimary).Top)
Теперь при изменении размеров области графика необходимо эту "ось" удалить и нарисовать заново. (для ее удаления и рисования есть модуль в VBA)
Вопрос о второй оси Х я задавал в форуме(см. тему несколько строк ниже)
Width = (ActiveChart.Axes(xlCategory, xlPrimary).Width)
Height = (ActiveChart.Axes(xlValue, xlPrimary).Height)
Left = (ActiveChart.Axes(xlCategory, xlPrimary).Left)
Top = (ActiveChart.Axes(xlValue, xlPrimary).Top)
Теперь при изменении размеров области графика необходимо эту "ось" удалить и нарисовать заново. (для ее удаления и рисования есть модуль в VBA)
Вопрос о второй оси Х я задавал в форуме(см. тему несколько строк ниже)
- Naeel Maqsudov
- Сообщения: 2570
- Зарегистрирован: 20 фев 2004, 19:17
- Откуда: Moscow, Russia
- Контактная информация:
А чем не устраивает стандартная возможность иметь 2 вертикальные оси на графике?
ActiveChart.SeriesCollection(<номер_серии>).AxisGroup = 2
Так серия данных привязывается ко второй оси.
Вторя ось появляется справа с делениями в масштабе данных указанной серии.
ActiveChart.SeriesCollection(<номер_серии>).AxisGroup = 2
Так серия данных привязывается ко второй оси.
Вторя ось появляется справа с делениями в масштабе данных указанной серии.
дело в том что на графике нужно иметь две горизонтальные оси, а не вертикальные, и если набор данных один, то возможности привязать вторую горизонтальную ось по-моему нет?
- Naeel Maqsudov
- Сообщения: 2570
- Зарегистрирован: 20 фев 2004, 19:17
- Откуда: Moscow, Russia
- Контактная информация:
Повесить собственный обработчик на любое изменение графика нельзя. Поэтому однозначно надо копать в другую сторону. Возможных решений пока 2.5 штуки.
1)
обойтись стандартными возможностями (но автора вопроса это не устраивает)
2)
так как графики Excel-это COM-объект, попробовать его субклассить и создать на его основе собственный ActiveX компонент (очень громоздко)
и еще половина рещения)
Дорисовывать график автофигурами, (как это сейчас и делается), однако обновления при ручном изменении в этом случае придется запретить (забить на них), так как сделать это полноценно практически нереально.
2ALL:
Коллеги! Еще предложения есть?
1)
обойтись стандартными возможностями (но автора вопроса это не устраивает)
2)
так как графики Excel-это COM-объект, попробовать его субклассить и создать на его основе собственный ActiveX компонент (очень громоздко)
и еще половина рещения)
Дорисовывать график автофигурами, (как это сейчас и делается), однако обновления при ручном изменении в этом случае придется запретить (забить на них), так как сделать это полноценно практически нереально.
2ALL:
Коллеги! Еще предложения есть?
может подойдет это ...дело в том что на графике нужно иметь две горизонтальные оси, а не вертикальные, и если набор данных один, то возможности привязать вторую горизонтальную ось по-моему нет?
2 оси (х) на одном графике в Excel ?
forum/viewtopic.php?t=4491
Вы не могли бы описать этот вариант более подробно? Идея интересная, но как это реализовать я не представляю.Naeel Maqsudov писал(а): так как графики Excel-это COM-объект, попробовать его субклассить и создать на его основе собственный ActiveX компонент (очень громоздко)