Yuk
Advanced Member | Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору Переношу из Excel FAQ: Sergey MSN Цитата: У меня на основе данных из базы данных создается wokbook в котором может быть очень много графиков. Для всех графиков мне бы хотелось, чтобы пользователь мог doubleclick на него и получить некоторые подробности. Для одного конкретного chart все работает, но как это заставить работать для всех chart одиноковым образом? Если я правильно вас понял, с вашим методом все равно в каждом chart надо что-то прописывать. С тем же успехом я могу туда прописать event в чистом виде. Разница только в ОБЪЕМЕ кода. Т.е. это работает, но это не элегантно. Sorry, если ошибаюсь. А мне не хочеться плодить сущности без нужды. | Очередная задача, решаемая с помощью классов. Идея в том, чтобы для каждой диаграммы создать объект нового класса, в котором и прописать, как диаграмма должна откликаться на события. Функция обработки события описывается только один раз в классе. Все что надо сделать - пройтись макросом по всем диаграммам в книге и создать для них объект класса. Например, так: Код: 'Вверху модуля определяем коллекцию объектов Dim myChartCol As Collection Sub Charts2Class() Dim ch As New myChartClass Set myChartCol = New Collection 'Для диаграмм отдельным листом For Each s In ActiveWorkbook.Charts Set ch.myChart = s myChartCol.Add ch Set ch = Nothing Next 'Для диаграмм, встроенных в листы For Each s In ActiveWorkbook.Worksheets For Each co In s.ChartObjects Set ch.myChart = co.Chart myChartCol.Add ch Set ch = Nothing Next Next End Sub | Теперь собственно класс (назовем его myChartClass): Код: Public WithEvents myChart As Chart Private Sub myChart_BeforeDoubleClick(ByVal ElementID As Long, ByVal Arg1 As Long, ByVal Arg2 As Long, Cancel As Boolean) MsgBox myChart.Name Cancel = True End Sub | При изменении класса и при добавлении новых диаграмм надо опять запускать макрос. Если диаграмма отдельным листом, можно сделать обработку события Workbook_NewSheet. А вот как отреагировать на событие новой диаграммы в листе, к сожалению не нашел. Кто-нибудь знает? | Всего записей: 1182 | Зарегистр. 02-07-2001 | Отправлено: 09:43 01-10-2006 | Исправлено: Yuk, 09:46 01-10-2006 |
|