0 / 0 / 0
Регистрация: 06.03.2016
Сообщений: 10
1
Excel

Макрос для изменения цвета легенды диаграммы

30.08.2018, 11:18. Показов 2568. Ответов 1

Студворк — интернет-сервис помощи студентам
Добрый день! Помогите пожалуйста разобраться. У меня есть таблица (во вложении). Нужно построить 2 диаграммы на основе данных из таблицы, а легенду в диаграмме покрасить в соответствии с раскраской ячеек( в 2ух диаграммах название одного и того же ряда должно быть одинаковым цветом). Написала код для 2ух диаграмм. Он перекрашивает легенду, но не в те цвета. Я поняла что Point(i) считает ряды с 1, которые выбраны в легенду диаграммы, но мне нужно что бы каждый ряд соответствовал цвету строки из таблицы. Как правильно написать код? Помогите пожалуйста
Visual Basic
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
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
Sub ColorChartColumnsbyCellColor()
'Updateby Extendoffice
    Dim xChart As Chart
    Dim I As Long, xRows As Long
    Dim xRg As Range, xCell As Range
    On Error Resume Next
    Set xChart = ActiveSheet.ChartObjects("Chart 1").Chart
    If xChart Is Nothing Then Exit Sub
    With xChart.SeriesCollection(1)
        Set xRg = ActiveSheet.Range(Split(Split(.Formula, ",")(1), "!")(1))
        xRows = xRg.Rows.Count
        Set xRg = xRg(1)
        For I = 1 To xRows
            .Points(1).Format.Fill.ForeColor.RGB = ThisWorkbook.Colors(xRg.Offset(I - 1, 0).Interior.ColorIndex)
        Next
        Set xRg = xRg(2)
        For I = 1 To xRows
            .Points(2).Format.Fill.ForeColor.RGB = ThisWorkbook.Colors(xRg.Offset(I - 1, 0).Interior.ColorIndex)
        Next
        Set xRg = xRg(3)
        For I = 1 To xRows
            .Points(3).Format.Fill.ForeColor.RGB = ThisWorkbook.Colors(xRg.Offset(I - 1, 0).Interior.ColorIndex)
        Next
        Set xRg = xRg(4)
        For I = 1 To xRows
            .Points(4).Format.Fill.ForeColor.RGB = ThisWorkbook.Colors(xRg.Offset(I - 1, 0).Interior.ColorIndex)
        Next
        Set xRg = xRg(5)
        For I = 1 To xRows
            .Points(5).Format.Fill.ForeColor.RGB = ThisWorkbook.Colors(xRg.Offset(I - 1, 0).Interior.ColorIndex)
        Next
        Set xRg = xRg(6)
        For I = 1 To xRows
            .Points(6).Format.Fill.ForeColor.RGB = ThisWorkbook.Colors(xRg.Offset(I - 1, 0).Interior.ColorIndex)
        Next
        Set xRg = xRg(7)
        For I = 1 To xRows
            .Points(7).Format.Fill.ForeColor.RGB = ThisWorkbook.Colors(xRg.Offset(I - 1, 0).Interior.ColorIndex)
        Next
        Set xRg = xRg(8)
        For I = 1 To xRows
            .Points(8).Format.Fill.ForeColor.RGB = ThisWorkbook.Colors(xRg.Offset(I - 1, 0).Interior.ColorIndex)
        Next
        Set xRg = xRg(9)
        For I = 1 To xRows
            .Points(9).Format.Fill.ForeColor.RGB = ThisWorkbook.Colors(xRg.Offset(I - 1, 0).Interior.ColorIndex)
        Next
        End With
    Set xChart = ActiveSheet.ChartObjects("Chart 2").Chart
    If xChart Is Nothing Then Exit Sub
    With xChart.SeriesCollection(1)
        Set xRg = ActiveSheet.Range(Split(Split(.Formula, ",")(1), "!")(1))
        xRows = xRg.Rows.Count
        Set xRg = xRg(1)
        For I = 1 To xRows
            .Points(1).Format.Fill.ForeColor.RGB = ThisWorkbook.Colors(xRg.Offset(I - 1, 0).Interior.ColorIndex)
        Next
        Set xRg = xRg(2)
        For I = 1 To xRows
            .Points(2).Format.Fill.ForeColor.RGB = ThisWorkbook.Colors(xRg.Offset(I - 1, 0).Interior.ColorIndex)
        Next
        Set xRg = xRg(3)
        For I = 1 To xRows
            .Points(3).Format.Fill.ForeColor.RGB = ThisWorkbook.Colors(xRg.Offset(I - 1, 0).Interior.ColorIndex)
        Next
        Set xRg = xRg(4)
        For I = 1 To xRows
            .Points(4).Format.Fill.ForeColor.RGB = ThisWorkbook.Colors(xRg.Offset(I - 1, 0).Interior.ColorIndex)
        Next
        Set xRg = xRg(5)
        For I = 1 To xRows
            .Points(5).Format.Fill.ForeColor.RGB = ThisWorkbook.Colors(xRg.Offset(I - 1, 0).Interior.ColorIndex)
        Next
        Set xRg = xRg(6)
        For I = 1 To xRows
            .Points(6).Format.Fill.ForeColor.RGB = ThisWorkbook.Colors(xRg.Offset(I - 1, 0).Interior.ColorIndex)
        Next
        Set xRg = xRg(7)
        For I = 1 To xRows
            .Points(7).Format.Fill.ForeColor.RGB = ThisWorkbook.Colors(xRg.Offset(I - 1, 0).Interior.ColorIndex)
        Next
        Set xRg = xRg(8)
        For I = 1 To xRows
            .Points(8).Format.Fill.ForeColor.RGB = ThisWorkbook.Colors(xRg.Offset(I - 1, 0).Interior.ColorIndex)
        Next
        Set xRg = xRg(9)
        For I = 1 To xRows
            .Points(9).Format.Fill.ForeColor.RGB = ThisWorkbook.Colors(xRg.Offset(I - 1, 0).Interior.ColorIndex)
        Next
        End With
End Sub
Вложения
Тип файла: xlsx Диаграмма1.xlsx (19.1 Кб, 13 просмотров)
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
30.08.2018, 11:18
Ответы с готовыми решениями:

Написать макрос для изменения цвета в документе Word
Здравствуйте! Нужен макрос для изменения цвета выделения(т.е цвета фона) всех согласных букв в...

Макрос изменения цвета данных в диаграмме
Всем доброго дня... мне необходим макрос для изменения цвета подписи в гистограмме, в зависимости...

Макрос для изменения цвета
Всем доброго времени суток. Помогите пожалуйста создать макрос, который изменял бы цвет текста...

Отображение легенды для диаграммы
Не отображает легенду, когда строю диаграмму, везде в параметрах Legend поставил true, но...

1
190 / 59 / 20
Регистрация: 16.07.2013
Сообщений: 234
07.09.2018, 14:12 2
Вам нужно таблицу загнать в двумерный массив, в первой мере у вас будут имена продуктов, во второй мере будут номера цветов ячеек. После этого делаете цикл в цикле, в первом будете проходить по именам легенды диаграммы, во втором проходиться по именам массива и сравнивать имена, если одинаковые, то берете цвет из массива.
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
07.09.2018, 14:12
Помогаю со студенческими работами здесь

Написать макрос для изменения размера шрифта и цвета шрифта
№ 1 . Создайте в рабочем листе таблицу с данными о своих друзьях , их адресами, телефонами , датами...

В легенды диаграммы выводится всего один пункт
При построении гистограммы выводит в легенде лишь один пункт (Ряд1), хотя сама гистограмма строится...

Макрос для создания диаграммы
Всем привет. Ребят, тут вопрос такой возник, в интернете что-то не нашла, может искала плохо... В...

Макрос для построения диаграммы по разнесенным столбикам
Здравствуйте! У меня вопрос по макросам. Необходимо записать макрос для построения диаграммы на...


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

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

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2023, CyberForum.ru