Форум программистов «Весельчак У»
  *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

  • Рекомендуем проверить настройки временной зоны в вашем профиле (страница "Внешний вид форума", пункт "Часовой пояс:").
  • У нас больше нет рассылок. Если вам приходят письма от наших бывших рассылок mail.ru и subscribe.ru, то знайте, что это не мы рассылаем.
   Начало  
Наши сайты
Помощь Поиск Календарь Почта Войти Регистрация  
 
Страниц: [1]   Вниз
  Печать  
Автор Тема: Проблема с окрашиванием ячеек сводной таблицы в Excel  (Прочитано 12135 раз)
0 Пользователей и 1 Гость смотрят эту тему.
Isnov
Гость
« : 16-12-2004 08:43 » 

Нужна помощь или совет.
В соответсвии с поставленной задачей данные определенных столбцов(назовем их "Нарушениями") сводной таблицы в Excel нужно красить в определенный цвет в зависимости от находящегося там значения. Допустим значение превышает 4, значит желтая зона (желтый цвет), более 8-ми - красная зона, если же менее 4-х - тогда ячейка должна быть окрашена в зеленый цвет.
При запуске рекордера Excel и задании значений с помощью "Условного форматирования". Получил следующий код, который добавил для обработки события активации страницы:
    ActiveSheet.PivotTables("Сводная таблица1").PivotSelect "'9. Нарушения'" _
        , xlDataAndLabel, True
   Selection.FormatConditions.Add Type:=xlCellValue, Operator:=xlLessEqual, _
        Formula1:="4"
    Selection.FormatConditions(1).Interior.ColorIndex = 35
    Selection.FormatConditions.Add Type:=xlCellValue, Operator:=xlBetween, _
        Formula1:="5", Formula2:="9"
    Selection.FormatConditions(2).Interior.ColorIndex = 36
    Selection.FormatConditions.Add Type:=xlCellValue, Operator:=xlGreaterEqual _
        , Formula1:="10"
    Selection.FormatConditions(3).Interior.ColorIndex = 38
Но при отработке события возникает следующая проблема. Поскольку вид и данные в сводной таблице могут изменятся (Допустим выбираем для отображения не все данные, а только часть). СТРОЧКИ КОТОРЫЕ БЫЛИ РАНЕЕ ЗАКРАШЕНЫ В (КРАСНЫЙ, ЖЕЛТЫЙ, ЗЕЛЕНЫЙ) УЖЕ НЕЛЬЗЯ ПЕРЕКРАСИТЬ В ДРУГОЙ ЦВЕТ!!! Даже задавая цвет вручную для каждой ячейки!
Что примечательно цвет другой любой ячейки сводной таблицы поменять можно (даже полей таблицы), а закрашеных в красный, желтый и зеленый ячеек нет.
Заранее спасибо за помощь.
Записан
PSD
Главный специалист

ru
Offline Offline
Пол: Мужской

« Ответ #1 : 16-12-2004 13:46 » 

По моему скромному разумению в этот код нужно немного модифицировать я тут смотрю форматы задаются для объекта Selection соотвесвенно перед тем как отработать коду форматирования нужно воткнуть свой кусок который задастнужную область
 например так
Код:
S="1"
S1="20"
Range)"D" & S & "{D" & S1:.Select


соотвественно S и S1 нжно будет вычеслить исходя из размера реально существующей таблицы

или еще можно добавить формат для пустой ячейки это даст то что ячейка не содержащая значения будет иметь цвет фона и не будет выделяться на экране ....
Записан

Да да нет нет все остальное от лукавого.
Isnov
Гость
« Ответ #2 : 16-12-2004 15:32 » 

Диапазон задан...  Отлично Впрочем приведу полный текст программы:
И для пояснения замечу, что имеетбся три вкладки: одна "Старт" (здесь задаются стартовые значения), другая "Таблица" (где находится сама сводная таблица), и третья "Данные" (куда выбрасываются данные после обработки SQL-запроса)

Private Sub Worksheet_Activate()
    If Range("R1").Value = 1 Then
      If Sheets("Старт").Range("E3").Value = "Подождите" Then
         MsgBox ("Пожалуйста, подождите, идет расчет")
         Sheets("Старт").Select
         Exit Sub
      End If
      Application.ScreenUpdating = False
      Range("R1").Value = ""
      Sheets("Данные").Select
      ActiveCell.SpecialCells(xlLastCell).Select
      R = Selection.Row
      C = Selection.Column
      Set RR = Worksheets("Данные").Range("A1:BA1")
      While (C > 1) And (RR.Cells(R, C).Value = "")
          C = C - 1
      Wend
      B = "Данные!R1C1:R" & R & "C" & C
      Sheets("Таблица").Select
      ActiveSheet.PivotTables("Сводная таблица1").SourceData = B
      ActiveSheet.PivotTables("Сводная таблица1").RefreshTable
      Application.CommandBars("PivotTable").Visible = False
      ActiveSheet.PivotTables("Сводная таблица1").PivotFields("Дата").NumberFormat = _
        "m/d/yyyy"
    ActiveSheet.PivotTables("Сводная таблица1").PivotSelect "'9. Нарушения'" _
        , xlDataAndLabel, True
    Selection.FormatConditions.Add Type:=xlCellValue, Operator:=xlLessEqual, _
        Formula1:="4"
    Selection.FormatConditions(1).Interior.ColorIndex = 35
    Selection.FormatConditions.Add Type:=xlCellValue, Operator:=xlBetween, _
        Formula1:="5", Formula2:="9"
    Selection.FormatConditions(2).Interior.ColorIndex = 36
    Selection.FormatConditions.Add Type:=xlCellValue, Operator:=xlGreaterEqual _
        , Formula1:="10"
    Selection.FormatConditions(3).Interior.ColorIndex = 38
    Range("A11").Select
    End If
End Sub

Это для листа "Таблица"...
описание процедуры для вкладки "Старт" я давать не буду, там считываются входящие данные, формируется SQL строка и запускается, а также устанавливается:
Worksheets("Таблица").Range("R1") = 1

А по поводу второго (пустая ячейка) не совсем понял... Можно поподробнее?
Записан
Isnov
Гость
« Ответ #3 : 16-12-2004 15:38 » 

Еще раз замечу, процедура описанная выше закрашивает ячейки в нужный цвет. Но потом изменить его уже просто невозможно, в том числе и вручную. В общем чудеса...  Отлично
Записан
Страниц: [1]   Вверх
  Печать  
 

Powered by SMF 1.1.21 | SMF © 2015, Simple Machines