Excel - запуск модуля при изменении графика?

Весь MS Office, программирование на Visual Basic for Applications и MS VB

Модератор: Naeel Maqsudov

_Andrew
Сообщения: 23
Зарегистрирован: 02 дек 2005, 12:51

Подскажите пожалуйста каким образом можна заставить выполнятся модуль VBA каждый раз при изменении графика (обьекта Chart) если например я меняю масштаб оси или меняю на графике обьект TextBox - должен запуститься модуль. То есть как можно обработать такое событие? (В стандартных событиях обьекта Chart такого события нет)
Аватара пользователя
Naeel Maqsudov
Сообщения: 2570
Зарегистрирован: 20 фев 2004, 19:17
Откуда: Moscow, Russia
Контактная информация:

(В стандартных событиях обьекта Chart такого события нет)
Вот. А нестандартных событий не бывает. Т.е. никак.
А зачем?
_Andrew
Сообщения: 23
Зарегистрирован: 02 дек 2005, 12:51

например: я привязал TextBox к точке на графике, причем сделал это програмно, теперь пользователь захотел изменить масштаб оси и мне нужно этот TextBox перестроить - как мне зафиксировать такое событие? Может это можно сделать как-то иначе? Подскажите
Аватара пользователя
Naeel Maqsudov
Сообщения: 2570
Зарегистрирован: 20 фев 2004, 19:17
Откуда: Moscow, Russia
Контактная информация:

У Вас на рабочем листе лижит Chart, а поверх него TextBox (именно элемент управления TextBox, или автофигура TextBox)?

Хотя, это не важно. В любом случае нельзя.
Предположим, что скорее всего имеется в виду автофигура.

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

Так нет ничего проще. Щелкните на точке графика так, чтобы выделилась не серия данных, а сама эта точка. Потом сделайте на ней двойной щелчок. Вывалится диалог "Format Data Point". Идите на закладку "Data Labels" и включите там Sow Label.

Теперь в появившуюся метку впишите что надо, отформатируйте, поверните под нужным углом и наслаждайтесь.
_Andrew
Сообщения: 23
Зарегистрирован: 02 дек 2005, 12:51

На самом деле не все так просто: на счет 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)
Вопрос о второй оси Х я задавал в форуме(см. тему несколько строк ниже)
Аватара пользователя
Naeel Maqsudov
Сообщения: 2570
Зарегистрирован: 20 фев 2004, 19:17
Откуда: Moscow, Russia
Контактная информация:

А чем не устраивает стандартная возможность иметь 2 вертикальные оси на графике?

ActiveChart.SeriesCollection(<номер_серии>).AxisGroup = 2

Так серия данных привязывается ко второй оси.
Вторя ось появляется справа с делениями в масштабе данных указанной серии.
_Andrew
Сообщения: 23
Зарегистрирован: 02 дек 2005, 12:51

дело в том что на графике нужно иметь две горизонтальные оси, а не вертикальные, и если набор данных один, то возможности привязать вторую горизонтальную ось по-моему нет?
Аватара пользователя
Naeel Maqsudov
Сообщения: 2570
Зарегистрирован: 20 фев 2004, 19:17
Откуда: Moscow, Russia
Контактная информация:

Повесить собственный обработчик на любое изменение графика нельзя. Поэтому однозначно надо копать в другую сторону. Возможных решений пока 2.5 штуки.

1)
обойтись стандартными возможностями (но автора вопроса это не устраивает)

2)
так как графики Excel-это COM-объект, попробовать его субклассить и создать на его основе собственный ActiveX компонент (очень громоздко)

и еще половина рещения)
Дорисовывать график автофигурами, (как это сейчас и делается), однако обновления при ручном изменении в этом случае придется запретить (забить на них), так как сделать это полноценно практически нереально.

2ALL:
Коллеги! Еще предложения есть?
Avsha
Сообщения: 665
Зарегистрирован: 08 сен 2005, 13:47
Откуда: KZ

дело в том что на графике нужно иметь две горизонтальные оси, а не вертикальные, и если набор данных один, то возможности привязать вторую горизонтальную ось по-моему нет?
может подойдет это ...
2 оси (х) на одном графике в Excel ?
forum/viewtopic.php?t=4491
_Andrew
Сообщения: 23
Зарегистрирован: 02 дек 2005, 12:51

Naeel Maqsudov писал(а): так как графики Excel-это COM-объект, попробовать его субклассить и создать на его основе собственный ActiveX компонент (очень громоздко)
Вы не могли бы описать этот вариант более подробно? Идея интересная, но как это реализовать я не представляю.
Ответить