Форум программистов, компьютерный форум, киберфорум
VBA
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.62/13: Рейтинг темы: голосов - 13, средняя оценка - 4.62
204 / 4 / 1
Регистрация: 14.05.2012
Сообщений: 78
1

Работа с диаграммой

11.10.2016, 09:24. Просмотров 2612. Ответов 14
Метки нет (Все метки)


Суть проблемы такова у меня есть диаграмма, которая строится на основании вносимых данных. и есть подписи данных. Их нужно автоматически раскрашивать в зависимости от значения (если чило положительное то в зеленый цвет, если отрицательное то красный цвет). Картинку прилогаю. Помогите решить.

Автоматический постройщик макроса дает такой результат
Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
ActiveSheet.ChartObjects("Chart 56").Activate
    ActiveChart.FullSeriesCollection(3).DataLabels.Select
    ActiveChart.FullSeriesCollection(3).Points(10).DataLabel.Select
    With Selection.Format.TextFrame2.TextRange.Font.Fill
        .Visible = msoTrue
        .ForeColor.ObjectThemeColor = msoThemeColorText2
        .ForeColor.TintAndShade = 0
        .ForeColor.Brightness = -0.25
        .Transparency = 0
        .Solid
    End With
    With Selection.Format.TextFrame2.TextRange.Font.Fill
        .Visible = msoTrue
        .ForeColor.RGB = RGB(255, 0, 0)
        .Transparency = 0
        .Solid
    End With
Но данный результат меня не устраивает так как опри внесении данных на других листах он автоматически будет переключатся на лист с диаграммой и проводить свои изменения. Если проще сказать я не хочу делать ее активной при раскраске значений, я хочу что бы это делалось незаметно от пользователя.
0
Миниатюры
Работа с диаграммой  
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
11.10.2016, 09:24
Ответы с готовыми решениями:

Какая разница между диаграммой классов и Entity Relationship диаграммой?
Какая разница между диаграммой классов и диаграммой сущность-связь?

Работа с диаграммой 1С 8.2
Доброго времени суток пользователи форума! Недавно начал изучать 1С 8.2. На днях столкнулся с...

работа с диаграммой
На диаграмме построен график функций. Выглядит как много пересекающихся прямых. Из этих пересечений...

толстая 8.2 -работа с диаграммой
Привет народ. Есть ли в 1с интерактивные возможности при работе с построенной диаграммой на форме?...

14
204 / 4 / 1
Регистрация: 14.05.2012
Сообщений: 78
11.10.2016, 16:53  [ТС] 2
Нашел решение.
Как то так:
Visual Basic
1
2
3
4
5
Dim cht As Chart
 
Set cht = ActiveSheet.ChartObjects("Chart 56").Chart
    
cht.FullSeriesCollection(3).Points(10).DataLabel.Format.TextFrame2.TextRange.Font.Fill.ForeColor.RGB = RGB(255, 0, 0)
Если кому интересно то про работу с диаграмамми посредством VBA можно найти здесь
0
4111 / 2218 / 938
Регистрация: 01.12.2010
Сообщений: 4,625
11.10.2016, 17:44 3
Раньше цвет шрифта в DataLabel можно было менять так,

Visual Basic
1
cht.FullSeriesCollection(3).Points(10).DataLabel.Font.Color = vbRed
0
5 / 3 / 2
Регистрация: 17.02.2016
Сообщений: 344
11.10.2016, 21:16 4
pashulka, Marich, подскажите пожалуйста, а как не по фиксированному столбцу окрасить подпись данных, т.е. если рост то синий, если падение от предыдущего то красная подпись?

Добавлено через 13 минут
попробовал через IF неполучилось
0
4111 / 2218 / 938
Регистрация: 01.12.2010
Сообщений: 4,625
11.10.2016, 21:38 5
АЛКС, С чем Вы собираетесь сравнивать значение самой первой точки ?
0
5 / 3 / 2
Регистрация: 17.02.2016
Сообщений: 344
11.10.2016, 21:43 6
pashulka, а по Points(1)<Points(2) так нельзя?
0
4111 / 2218 / 938
Регистрация: 01.12.2010
Сообщений: 4,625
11.10.2016, 21:59 7
У первой точки нет предыдущей, а у последней нет последующей. Поэтому я и задал резонный вопрос - если сравнивать значение второй точки с первой, то с чем сравнивать первую ?
0
5 / 3 / 2
Регистрация: 17.02.2016
Сообщений: 344
11.10.2016, 22:23 8
pashulka, если без первой то как можно реализовать цвет подписи данных по предыдущей, т.е. окрас со 2?

PS/ а я предполагал что можно и без первой, т.е. с начало определяем по предыдущие если Points(1) меньше Points(2), то Points(2) синий, если Points(2) больше Points(3) то красный и т.д., а чтоб определить первую точку, т.е. Points(1) то нужно сравнить Points(1) и Points(2), если Points(1) меньше Points(2) то Points(1) красный
0
4111 / 2218 / 938
Регистрация: 01.12.2010
Сообщений: 4,625
11.10.2016, 22:30 9
Цитата Сообщение от АЛКС Посмотреть сообщение
если без первой то как можно реализовать цвет подписи данных по предыдущей, т.е. окрас со 2?
Тогда так. После открытия книги, используйте клавишу F9
1
Вложения
Тип файла: zip Sample_for_АЛКС.zip (9.3 Кб, 5 просмотров)
5 / 3 / 2
Регистрация: 17.02.2016
Сообщений: 344
11.10.2016, 22:57 10
pashulka, а можно не макросом, а чтоб отслеживал на листе1 все диаграммы и при изменении окрашивал?

Добавлено через 5 минут
pashulka, подскажи пожалуйста, а положение метки (подписи данных), можно сделать, чтоб если меньше то положение метки - снизу, а если больше то положение метки сверху? - вот это круто смотрится и главное удобно!
0
4111 / 2218 / 938
Регистрация: 01.12.2010
Сообщений: 4,625
11.10.2016, 23:04 11
1) Можно либо программно - событие диаграммы Calculate, либо вручную.

2) Изменение месторасположения DataLabel - допускается.
1
5 / 3 / 2
Регистрация: 17.02.2016
Сообщений: 344
11.10.2016, 23:32 12
pashulka, макросом тоже удобно только прописать бы для всех диаграмм сразу окрас подписи данных по FullSeriesCollection(1), а вообще, положение метки можно сделать тоже макросом по предыдущей, для всех диаграмм на Листе1 у кого есть подпись данных (у меня диаграмм на листах по 30-40 шт.) ?

Добавлено через 15 минут
pashulka, написал, через Position, а как прописать для всех диаграмм на листе (точное количество неизвестно)?

Добавлено через 7 минут
pashulka, попытался как Вы раньше показывали через ShapeRange - не получилось

Visual Basic
1
With ActiveSheet.ChartObjects.ShapeRange.Chart.SeriesCollection(1)
0
4111 / 2218 / 938
Регистрация: 01.12.2010
Сообщений: 4,625
11.10.2016, 23:40 13
Если есть чётко выраженная связь между ячейками листа и диаграммами, например, первая диаграмма построена на основании данных диапазона A1:B10, вторая A11:B10 и т.д., то менять формат DataLabel можно сразу после изменения данных в исходных ячейках (см. событие листа Worksheet_Change)

Если же данные разбросаны хаотично, то чтобы не перебирать все диаграммы, можно отслеживать изменения - используя событие диаграммы Calculate

Если у некоторых точек подпись не должна отображаться, то определить её наличие можно с помощью свойства HasDataLabels

Изменять позицию DataLabel можно либо с помощью свойств Top, Left, либо с помощью свойства Position, например, Position = xlLabelPositionOutsideEnd 'у вершины, внутри или Position = xlLabelPositionInsideEnd 'у вершины, снаружи

P.S. ShapeRange можно использовать для изменения размеров всех диаграмм (без цикла), но сейчас оно не нужно.
1
5 / 3 / 2
Регистрация: 17.02.2016
Сообщений: 344
12.10.2016, 00:39 14
pashulka, у меня в 1-ой диаграмме
- 1 ряд A4:I4
- 2 ряд A6:I6
во второй диаграмме
- 1 ряд A5:I5
- 2 ряд A8:I8
Это значит данные разбросаны, остается метод перебора (да и четкога кол-ва диаграмм нет). Неужели нельзя сослаться на все диаграммы независимо от имени мне только в каждой диаграмме с рядом SeriesCollection(1) надо цвета на подпись поставить и на другом листе место расположение подписи тоже сделать? - загвоздка в том как сослаться на все диаграммы листа1

Ps/ прочитал примеры про Calculate и Worksheet_Change - что-то непонял

Добавлено через 21 минуту
pashulka, придется циклами через названия диаграмм прогонять (For i = 1 To 40) с ошибкой, а можно обойти ошибку несовпадения точного количества диаграмм?
0
4111 / 2218 / 938
Регистрация: 01.12.2010
Сообщений: 4,625
12.10.2016, 09:02 15
Если Вам очень хочется перебирать все диаграммы на листе, т.е. не только ту, где произошли изменения данных, но и все остальные, то смотрите аттач. Если не прокатит, то замените For Each Next на For Next

Цитата Сообщение от АЛКС Посмотреть сообщение
а можно обойти ошибку несовпадения точного количества диаграмм?
Вообще-то, количество диаграмм на листе - величина довольно точная (см. свойство Count)

P.S. Справедливости ради можно вспомнить, что в старых версиях Excel, при группировке диаграммы с другой графикой, такая диаграмма уже не учитывалась, но в версии 2007 такой проблемы больше нет.
1
Вложения
Тип файла: zip Sample_for_АЛКС2.zip (17.4 Кб, 6 просмотров)
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
12.10.2016, 09:02

Заказываю контрольные, курсовые, дипломные и любые другие студенческие работы здесь или здесь.

Работа с куговой диаграммой
Исходными данными для этой диаграммы является набор чисел a1, ..., an, а диаграмма представляет...

Работа с файлами, двумерными массивами и диаграммой
Задание Пользователь указывает имена N файлов, которые содержат элементы квадратных целочисленных...

Связка данных с диаграммой
Всем доброго дня.Подскажите пожалуйста как реализовать следующую ситуацию.Есть условная форма1 на...

Значения ProgressBar диаграммой
Допустим есть три прогрессбара. Они работают так: procedure TForm1.Timer1Timer(Sender: TObject);...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
15
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2021, vBulletin Solutions, Inc.