Есть задача.В excel 2007 нужно, чтобы в круговой диаграмме дольки меняли свой цвет в зависимости,от цвета ячейки. А цвет ячейки в свою очередь зависит, от значения. Т.е. применяется условное форматирование.На сайте нашел подобный макрос в теме: "Цвет диаграммы из ячеек с ее данными" (http://www.planetaexcel.ru/techniques/4/186/#7589) Однако данный макрос работает только при окраске ячеек без условного форматирования. Как добиться, чтобы цвет менялся с использованием условного форматирования?
Внутри цикла тупо приравнивается цвет элемента диаграммы цвету фона ячейки. Вам придется чуть сложнее. Нужно проверять то же условие, что и в условном форматировании и присваивать такой же цвет.
Файл вложения увидел девственно чистым...
Следствие из третьего закона Чизхолма: "Даже если ясность изложения исключает неверное толкование, все равно найдется кто-то, кто поймет Вас неправильно."
Если у Вас офис 2010 или моложе (больше по номеру), то Вам можно обойтись малой кровью: заменить в имеющемся коде
Код
r.cells(1).Interior.Color
на
Код
r.cells(1).DisplayFormat.Interior.Color
Следствие из третьего закона Чизхолма: "Даже если ясность изложения исключает неверное толкование, все равно найдется кто-то, кто поймет Вас неправильно."
PerfectVam написал: Если у Вас офис 2010 или моложе (больше по номеру), то Вам можно обойтись малой кровью: заменить в имеющемся кодеКод ? 1r.cells(1).Interior.ColorнаКод ? 1r.cells(1).DisplayFormat.Interior.Color
PerfectVam офис 2007. Этот способ я тоже уже пробовал. При выполнении выдает ошибку: Run-time error 438
If TypeName(Selection) <> "ChartArea" Then Exit Sub
Set c = ActiveChart.SeriesCollection
For j = 1 To c.Count
f = c(j).Formula
m = Split(f, ",")
Set q = Range(m(2))
For i = 1 To q.Cells.Count
Set r = q.Cells(i)
If r.FormatConditions.Count Then
For k = 1 To r.FormatConditions.Count
form1 = Replace(r.FormatConditions(k).Formula1, ",", ".")
form2 = Replace(r.FormatConditions(k).Formula2, ",", ".")
If ((r.Value >= Evaluate(form1)) And (r.Value <= Evaluate(form2))) Or _
((r.Value <= Evaluate(form1)) And (r.Value >= Evaluate(form2))) Then
c(j).Points(i).Format.Fill.ForeColor.RGB = r.FormatConditions(k).Interior.Color
End If
Next k
End If
Next i
Next j
Следствие из третьего закона Чизхолма: "Даже если ясность изложения исключает неверное толкование, все равно найдется кто-то, кто поймет Вас неправильно."
PerfectVam, у нас помогают людям, которые просят помощи, а не ставят задачи. А где ставят, есть отдельный раздел. Новичкам везде у нас дорога, новичкам везде у нас почёт.
"..Сладку ягоду рвали вместе, горьку ягоду я одна."