|
|||||||
Как сопоставить цвет диаграммы и исходных данных
Время создания: 12.10.2019 20:33
Раздел: Разные закладки - VBA - Excel - Графики
Запись: xintrea/mytetra_db_adgaver_new/master/base/1570884319dzwza70dtm/text.html на raw.githubusercontent.com
|
|||||||
|
|||||||
Как сопоставить цвет диаграммы и исходных данных Автор Дмитрий Якушев На чтение4 мин. Просмотров56 Что делает макрос: При создании информационной панели, вы можете иметь определенные цветовые схемы для различных типов данных. Например, вы можете захотеть, чтобы Северный регион всегда появлялся в определенном цвете, или вы можете захотеть, чтобы некоторые продукты имели цвет товарного знака. Макрос позволяет автоматически менять цвета графика в соответствии с цветом исходного диапазона. Идея заключается в том, что вы можете сопоставить цвет диаграммы и исходных данных, взяв цветовой код ячейки в диапазоне источника, а затем применить те же цвета для каждой соответствующей диаграммы серии. Рисунок дает представление о том, как она работает. Этот макрос не может захватить цвета, которые были применены с помощью условного форматирования или цвета умных таблиц. Содержание
Все карты имеют объект SeriesCollection, который содержит различные серии данных. В этом макросе, мы выполняем цикл через все серии.
'========================================================================================================= 'Для обычного графика Sub test_SopostavitCvetDiagrammiIIshodnihDannih() ActiveSheet.ChartObjects("Диаграмма 1").Activate vRetVal = Application.InputBox("Укажите любое число(0-1-2):", "Запрос данных", "", Type:=1) If IsNumeric(vRetVal) Then Call SopostavitCvetDiagrammiIIshodnihDannih(vRetVal) End Sub Sub SopostavitCvetDiagrammiIIshodnihDannih(Optional ByVal intTypeData As Integer = 2) 'intTypeData=0 'имя ряда 'intTypeData=1 'подписи 'intTypeData=2'данные 'Шаг 1: Объявляем переменные Dim oChart As Chart Dim MySeries As Series Dim FormulaSplit As Variant Dim SourceRangeColor As Long
'Шаг 2: Наведите курсор на активный график On Error Resume Next Set oChart = ActiveChart
'Шаг 3: Выход не был выбран ни один график If oChart Is Nothing Then MsgBox "График не выбран." Exit Sub End If
' 'Восстановить стиль oChart.ClearToMatchStyle For Each MySeries In oChart.SeriesCollection Select Case intTypeData
Case 0 'имя ряда FormulaSplit = Split(MySeries.Formula, ",")(0) 'имя ряда FormulaSplit = Split(FormulaSplit, "(")(1) Case 1 'подписи FormulaSplit = Split(MySeries.Formula, ",")(1) 'подписи Case 2 'данные FormulaSplit = Split(MySeries.Formula, ",")(2) 'данные Case Else
End Select Dim rRange As Range, rCell As Range Set rRange = Range(FormulaSplit) iCh = 1 For Each rCell In rRange.Cells SourceRangeColor = rCell.Interior.Color
'если одна ячейка,то закрашиваем весь ряд If intTypeData = 0 Then 'Шаг 7: Применить окраску On Error Resume Next MySeries.Format.Line.ForeColor.RGB = SourceRangeColor MySeries.Format.Line.BackColor.RGB = SourceRangeColor MySeries.Format.Fill.ForeColor.RGB = SourceRangeColor If Not MySeries.MarkerStyle = xlMarkerStyleNone Then MySeries.MarkerBackgroundColor = SourceRangeColor MySeries.MarkerForegroundColor = SourceRangeColor End If Else Set oPoint = MySeries.Points(iCh) 'Шаг 7: Применить окраску ' On Error Resume Next ' MySeries.Points(iCh).Select MySeries.Points(iCh).Format.Fill.ForeColor.RGB = SourceRangeColor MySeries.Points(iCh).Format.Fill.BackColor.RGB = SourceRangeColor ' If Not MySeries.MarkerStyle = xlMarkerStyleNone Then ' MySeries.MarkerBackgroundColor = SourceRangeColor ' MySeries.MarkerForegroundColor = SourceRangeColor ' End If End If iCh = iCh + 1 Next Next MySeries 'c.SeriesCollection(j).Points(i).Format.Fill.ForeColor.RGB = _ ThisWorkbook.Sheets(strShName_Sourse_Chart).Cells(r.Cells(i).Row, r.Cells(i).Column - 1).Interior.Color End Sub '========================================================================================================= 'Для графика на основе сводной Sub test_SopostavitCvetDiagrammiIIshodnihDannih_pt() ActiveSheet.ChartObjects("Диаграмма 1").Activate vRetVal = Application.InputBox("Укажите любое число(0-1-2):", "Запрос данных", "", Type:=1) If IsNumeric(vRetVal) Then Call SopostavitCvetDiagrammiIIshodnihDannih_pt(vRetVal) End Sub Sub SopostavitCvetDiagrammiIIshodnihDannih_pt(Optional ByVal intTypeData As Integer = 2) 'intTypeData=0 'имя ряда 'intTypeData=1 'подписи 'intTypeData=2'данные 'Шаг 1: Объявляем переменные Dim oChart As Chart Dim MySeries As Series Dim FormulaSplit As Variant Dim SourceRangeColor As Long
'Шаг 2: Наведите курсор на активный график On Error Resume Next Set oChart = ActiveChart
'Шаг 3: Выход не был выбран ни один график If oChart Is Nothing Then MsgBox "График не выбран." Exit Sub End If
' 'Восстановить стиль oChart.ClearToMatchStyle For Each MySeries In oChart.SeriesCollection Select Case intTypeData
Case 0 'имя ряда FormulaSplit = Split(MySeries.Formula, ",")(0) 'имя ряда FormulaSplit = Split(FormulaSplit, "(")(1) Case 1 'подписи FormulaSplit = Split(MySeries.Formula, ",")(1) 'подписи Case 2 'данные FormulaSplit = Split(MySeries.Formula, ",")(2) 'данные Case Else
End Select Dim rRange As Range, rCell As Range Set rRange = Range(FormulaSplit) 'dd = rRange.Columns.Count 'ds = rRange.Rows.Count LngRow = 0 'для проверки номера строки подписи iCh = 1 For Each rCell In rRange.Cells If rCell.Row <> LngRow Then SourceRangeColor = rCell.Interior.Color Debug.Print rCell.Address 'если одна ячейка,то закрашиваем весь ряд If intTypeData = 0 Then 'Шаг 7: Применить окраску On Error Resume Next MySeries.Format.Line.ForeColor.RGB = SourceRangeColor MySeries.Format.Line.BackColor.RGB = SourceRangeColor MySeries.Format.Fill.ForeColor.RGB = SourceRangeColor If Not MySeries.MarkerStyle = xlMarkerStyleNone Then MySeries.MarkerBackgroundColor = SourceRangeColor MySeries.MarkerForegroundColor = SourceRangeColor End If Else Set oPoint = MySeries.Points(iCh) 'Шаг 7: Применить окраску ' On Error Resume Next ' MySeries.Points(iCh).Select MySeries.Points(iCh).Format.Fill.ForeColor.RGB = SourceRangeColor MySeries.Points(iCh).Format.Fill.BackColor.RGB = SourceRangeColor ' If Not MySeries.MarkerStyle = xlMarkerStyleNone Then ' MySeries.MarkerBackgroundColor = SourceRangeColor ' MySeries.MarkerForegroundColor = SourceRangeColor ' End If End If iCh = iCh + 1 LngRow = rCell.Row 'присвоить номер строки End If Next Next MySeries 'c.SeriesCollection(j).Points(i).Format.Fill.ForeColor.RGB = _ ThisWorkbook.Sheets(strShName_Sourse_Chart).Cells(r.Cells(i).Row, r.Cells(i).Column - 1).Interior.Color
End Sub |
|||||||
Так же в этом разделе:
|
|||||||
|
|||||||
|