|
Управление объектами на диаграмме
|
|||
---|---|---|---|
#18+
Добрый день! Если кто знает, подскажите пожалуйста. Задача такая: на форме есть объект диаграмма, в которую выводятся расчетные данные. Необходимо на этой диаграмме подсвечивать определенные области по заданным условиям. Решил использовать для этого фигуры с панели рисования - прямоугольники. Проблема: не знаю как получить доступ к данным - прямоугольникам из программного кода. Необходимо из создавать, удалять, менять размер, двигать, перекрашивать и менять прозрачность. Пример в приложении. ... |
|||
:
Нравится:
Не нравится:
|
|||
02.10.2015, 11:54 |
|
Управление объектами на диаграмме
|
|||
---|---|---|---|
#18+
Вложение. ... |
|||
:
Нравится:
Не нравится:
|
|||
02.10.2015, 12:24 |
|
Управление объектами на диаграмме
|
|||
---|---|---|---|
#18+
При этом сами прямоугольники находятся внутри объекта диаграммы, и с формы напрямую не доступны. ... |
|||
:
Нравится:
Не нравится:
|
|||
02.10.2015, 16:44 |
|
Управление объектами на диаграмме
|
|||
---|---|---|---|
#18+
Добрый день! Вот еще один пример, но в Excel. Необходимо через VBA получить доступ к свойствам объекта "Прямоугольник 1", расположенному на диаграмме. В коллекции ActiveSheet.Shapes данный объект отсутствует. Зато в данной коллекции присутствует сама диаграмма. Я полагаю, что в объекте Диаграммы должна быть своя коллекция фигур - Shapes, но получить к ней доступ не могу. ... |
|||
:
Нравится:
Не нравится:
|
|||
07.10.2015, 17:50 |
|
Управление объектами на диаграмме
|
|||
---|---|---|---|
#18+
Код: vbnet 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33. 34. 35. 36. 37. 38.
... |
|||
:
Нравится:
Не нравится:
|
|||
07.10.2015, 18:20 |
|
Управление объектами на диаграмме
|
|||
---|---|---|---|
#18+
Большое спасибо! Ларчик просто открывался )) ... |
|||
:
Нравится:
Не нравится:
|
|||
08.10.2015, 09:17 |
|
Управление объектами на диаграмме
|
|||
---|---|---|---|
#18+
Добрый день. Осталась та же проблема. Если диаграмма построена в экселе, то для нее доступна коллекция Shapes, и управление фигурами осуществляется легко и просто. На форме Access диаграмма строится с помощью компонента MS Graph, который не содержит коллекции Shapes, по крайней в явном виде. Однако в ручном режиме на диаграмме Graph в Access можно рисовать фигуры, которые хранятся в ней как объекты, значит как-то к ним модно получить доступ...? Пример кода из вложенного файла: Код: vbnet 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15.
Пытался объект Chart из диаграммы с формы присвоить переменной Excel.Chart, не получилось. Может Graph.Chart есть какая-то другая коллекция, аналогичная Shapes, в которой хранятся элементы диаграммы, в т.ч. рисунки... Пример во вложении. ... |
|||
:
Нравится:
Не нравится:
|
|||
04.11.2015, 14:59 |
|
Управление объектами на диаграмме
|
|||
---|---|---|---|
#18+
Роман_1154, жалко, что пример в accdb, у многих , как я понял, здесь еще 2003 акс, если бы было в mdb (в формате 2003-го) , то может кто-то бы и попытался вам помочь ... |
|||
:
Нравится:
Не нравится:
|
|||
04.11.2015, 22:00 |
|
Управление объектами на диаграмме
|
|||
---|---|---|---|
#18+
По просьбам трудящихся форума :-) ... |
|||
:
Нравится:
Не нравится:
|
|||
04.11.2015, 22:36 |
|
Управление объектами на диаграмме
|
|||
---|---|---|---|
#18+
mds_worldПо просьбам трудящихся форума :-) Спасибо за конверт базы )) P.s. Вот учетку востановил, а то "Роман_1154" слишком затянулось )) P.p.s. Может у кого есть толковая дока на русском по объектке MS Office? Ну должно тут все просто быть.... Класс Excel.Chart и Graph.Chart .... Почти идентичны, но в одном есть коллекция Shapes в другом нет.... ... |
|||
:
Нравится:
Не нравится:
|
|||
04.11.2015, 23:46 |
|
Управление объектами на диаграмме
|
|||
---|---|---|---|
#18+
Sopr, похоже не умеет этого Access, но можно использовать диаграмму из Excel как OLE объект, и делать всё с фигурами с помощью библиотеки Excel ... |
|||
:
Нравится:
Не нравится:
|
|||
05.11.2015, 15:52 |
|
Управление объектами на диаграмме
|
|||
---|---|---|---|
#18+
guest_rusimportSopr, похоже не умеет этого Access, но можно использовать диаграмму из Excel как OLE объект, и делать всё с фигурами с помощью библиотеки Excel Пытался двигаться в этом направлении. Скопировал диаграмму из эксель на форму Акса. Вставилась нормально. Но сразу возникла проблема с источником данных для диаграммы, т.к. экселевская хочет получать данные с листа эксель, а мне удобно как в Аксе из запроса, при этом при активации диаграммы открывался эксель, а конкретно тот файл эксель, из которого я копировал диаграмму. Как-то мне это сразу жутко не понравилось... Сейчас склоняюсь к варианту из Акса выкидывать данные в Эксель и с графиками уже в нем работать. Или в дотнете маленькое приложение написать (если компонент подходящий найду), которое будет график отображать по данным с сервера и на нем рисовать фигуры... ... |
|||
:
Нравится:
Не нравится:
|
|||
05.11.2015, 16:08 |
|
Управление объектами на диаграмме
|
|||
---|---|---|---|
#18+
Sopr, можно получать данные и из запроса для свободного объекта OLE, посмотрите пример (акс2003) ... |
|||
:
Нравится:
Не нравится:
|
|||
06.11.2015, 10:54 |
|
Управление объектами на диаграмме
|
|||
---|---|---|---|
#18+
guest_rusimport, Большое спасибо, это то, что нужно. Но у меня сразу возникла проблема: Вот эта строка: Код: vbnet 1.
"не отрабатывает", т.е. срабатывает как-то странно... Если двойным щелчком зайти в ОЛЕ объект, то там по прежнему диаграмма +3 листа, и на первом листе данных из рекордсета нет. Однако следующая строка: Код: vbnet 1. 2.
срабатывает нормально, на диаграмме появляются столько делений, сколько записей в рекордсете. Однако самих столбцов на диаграмме нет. Такое ощущение, что сразу после отработки процедуры все изменения ОЛЕ объекта, сделанные в коде - отменяются, за исключением SetSourceData для диаграммы. ... |
|||
:
Нравится:
Не нравится:
|
|||
06.11.2015, 14:55 |
|
Управление объектами на диаграмме
|
|||
---|---|---|---|
#18+
Access 2007 у меня, может из-за этого...? ... |
|||
:
Нравится:
Не нравится:
|
|||
06.11.2015, 15:05 |
|
Управление объектами на диаграмме
|
|||
---|---|---|---|
#18+
Sopr, без примера сказать что-либо затруднительно ... есть ещё такой вариант (см. пример) ... |
|||
:
Нравится:
Не нравится:
|
|||
06.11.2015, 17:10 |
|
Управление объектами на диаграмме
|
|||
---|---|---|---|
#18+
guest_rusimport, Да пример, собственно, тот же, что Вы выложили. Просто добавляем в таблицу несколько записей (я добавил 13) открываем форму и жмем кнопку. У меня это выглядит так - см. вложение. Очень странный эффект.... CurrentRegion как-бы понимает, что записей стало больше, но вот самих данных нет. ... |
|||
:
Нравится:
Не нравится:
|
|||
06.11.2015, 20:40 |
|
Управление объектами на диаграмме
|
|||
---|---|---|---|
#18+
т.е. получается такая вещь, если менять что-то, касательно непосредственно самой диаграммы, то изменения остаются. Например размер прямоугольника меняется без проблем. А если изменения делать на листе, то при завершении процедуры обработки нажатия кнопки все остается как было..... Может попробовать сделать объектные переменные: Код: vbnet 1. 2. 3.
глобальными в области формы.... сейчас попробую.... ... |
|||
:
Нравится:
Не нравится:
|
|||
06.11.2015, 20:45 |
|
Управление объектами на диаграмме
|
|||
---|---|---|---|
#18+
Может попробовать сделать объектные переменные: Код: vbnet 1. 2. 3.
глобальными в области формы.... сейчас попробую.... не прокатило.... ... |
|||
:
Нравится:
Не нравится:
|
|||
06.11.2015, 20:51 |
|
Управление объектами на диаграмме
|
|||
---|---|---|---|
#18+
Sopr, добавил в таблицу первого примера ещё 12 записей, открыл форму , жмакнул кнопку , получил вполне адекватный результат... меня смущает вид вашей диаграммы на скрине, там явно строится диаграмма не по значениям в таблице , а по их порядковым номерам, что-то у вас не так пошло, то ли , как любят тут поговаривать, "руки шалят - надо выпрямить"... делайте пример в mdb и прилагайте к форуму, в полтергейсты я не верю :) ... |
|||
:
Нравится:
Не нравится:
|
|||
06.11.2015, 21:02 |
|
Управление объектами на диаграмме
|
|||
---|---|---|---|
#18+
Sopr, ещё одно смущает с вашего скрина , у меня для значений в диаграмме используется "Ряд 2" , а у вас - "Ряд 1" , покопайтесь в настройках диаграммы, может всё просто решается :) ... |
|||
:
Нравится:
Не нравится:
|
|||
06.11.2015, 21:39 |
|
Управление объектами на диаграмме
|
|||
---|---|---|---|
#18+
guest_rusimportSopr, ещё одно смущает с вашего скрина , у меня для значений в диаграмме используется "Ряд 2" , а у вас - "Ряд 1" , покопайтесь в настройках диаграммы, может всё просто решается :) Хорошо, давайте разбираться по шагам. 1. Скачиваю и открываю Ваш первый пример. Открываю таблицу и форму, кнопку не трогаю. Перед собой вижу картинку 1 из вложения. Диаграмма построена по ряду 2 (см. легенду). При этом столбцы не соответствуют данным таблицы - по порядку. 2. Нажимаю кнопку и вижу следующую картинку - картинка 2 из вложения. Вид диаграммы изменился, при этом теперь диаграмма построена по ряду 1, т.к. в коде мы меняем источник данных для диаграммы (dg.SetSourceData xlSheet.Cells(1, 1).CurrentRegion), и данные диаграммы не соответствуют данным таблицы, т.к. Максимальное значение в таблице 10, а максимальный столбец на диаграмме 12. Т.е. действительно диаграмма построена по порядковым номерам. 3. Добавляю в таблицу 13 записей и нажимаю кнопку. Получаю картинку 3. Диаграмма построена по порядковым номерам. При этом если двойным кликом зайти в диаграмму то видим, что листы 2 и 3 не удалены, а на листе 1 два столбца данных, которые и были изначально туда внесены - картинка 4. Получается, что данные из рекордсета на лист небыли вставлены, либо они были вставлены не туда, откуда диаграмма берет данные. ... |
|||
:
Нравится:
Не нравится:
|
|||
07.11.2015, 14:35 |
|
Управление объектами на диаграмме
|
|||
---|---|---|---|
#18+
Проблема вот в этом месте: Код: vbnet 1.
Данные вставляются на лист, их тут же можно прочитать, но как только процедура обработки заканчивается, листы ОЛЕ объекта возвращаются в исходное состояние! Может у листов, т.е. у книги в ОЛЕ объекте быть какая-то настройка защиты от изменений? Я в excel совсем не силен )) ... |
|||
:
Нравится:
Не нравится:
|
|||
07.11.2015, 14:56 |
|
Управление объектами на диаграмме
|
|||
---|---|---|---|
#18+
Я теряюсь в догадках. Если внутри OLE объекта руками данные в лист вводить, то все сохраняется, диаграмма строится. Из программы данные не сохраняются (( ... |
|||
:
Нравится:
Не нравится:
|
|||
07.11.2015, 15:08 |
|
Управление объектами на диаграмме
|
|||
---|---|---|---|
#18+
Все, разобрался. Ошибка была в строке: Код: vbnet 1. 2.
Получалось, что мы создавали новую пустую книгу и работали с ней, в частности выводили туда рекордсет. Соответственно при завершении процедуры переменная xlBook вместе с объектом новой книги уничтожалась, а книга OLE объекта оставалась не измененной. Немного переписал код, чтобы обойтись без "книги", получилось так: Код: vbnet 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33. 34. 35. 36. 37. 38. 39. 40. 41. 42. 43. 44. 45. 46. 47. 48.
Извиняюсь за грязь, по позже почищу и выложу рабочий пример, может кому пригодится. 2 guest_rusimport, огромное Вам спасибо за идею и реализацию! ... |
|||
:
Нравится:
Не нравится:
|
|||
07.11.2015, 16:04 |
|
|
start [/forum/search_topic.php?author=Andemki&author_mode=last_topics&do_search=1]: |
0ms |
get settings: |
10ms |
get forum list: |
12ms |
get settings: |
9ms |
get forum list: |
15ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
44ms |
get topic data: |
10ms |
get forum data: |
2ms |
get page messages: |
51ms |
get tp. blocked users: |
1ms |
others: | 443ms |
total: | 603ms |
0 / 0 |