Страницы: 1
RSS
Изменить цвет ячеек в зависимости от условий макросом
 
Доброго времени суток!
Есть таблица 12х31 (годовой график выходов на работу). Необходимо закрасить другим цветом те ячейки, которые соответствуют дням отсутствующим в месяце указанного года (т.е 29,30,31 февраля, 31 апреля и т.д.). С этой задачей легко справляется УФ. Но проблема в том, что далее мне необходимо будет циклом заполнить график значениями из формы. А XL уперто не хочет воспринимать заливку УФ как другой цвет. Подскажите пожалуйста, как сменить цвет ячеек макросом? Заранее огромное спасибо всем!
П.С. Офис 2003 года
 
Цитата
Ronin751 написал: далее мне необходимо будет циклом заполнить график значениями из формы
Т.е. цвет заливки ячейки будет для макроса неким условием, по которому нужно заполнять/не заполнять График? Если Да, то подход не верный. Любое изменение оттенка заливки ячейки (даже не заметное глазу) приведет к неправильной работе макроса. Заполняйте график, проверяя именно даты попадающие/не попадающие куда надо. Тем более, что Вы их все равно собираетесь проверять для заливки другим цветом. Двойная работа.
Цитата
Ronin751 написал: XL уперто не хочет воспринимать заливку УФ как другой цвет
Да, до версии 2010 в VBA не было такого свойства у диапазона. От 2010 и выше появилось Range("A1").DisplayFormat. Может уже стоит обновиться?
Согласие есть продукт при полном непротивлении сторон
 
Цитата
Может уже стоит обновиться?
Абсолютно с Вами согласен. Только руководство упорно не хочет использовать дополнительную карту расходов на новые машины. А нынешнее оборудование не справится с новым офисом. ( Ну это я немного поплакался в жилетку ).
Цитата
Т.е. цвет заливки ячейки будет для макроса неким условием
Точно так. Только я в качестве условия использовал именно конкретно указанный цвет.
Цитата
Заполняйте график, проверяя именно даты попадающие/не попадающие куда надо
Вот тут мне не понятно. Как макросом определить есть такая дата в месяце или её нет?
П.С. Спасибо, что обратили внимание на тему!  
 
Ronin751, условное форматирование Вы можете посмотреть в своем файле? Вот сделайте макрос, который будет делать то же, что Ваше условное форматирование.
 
Цитата
Ronin751 написал:
А нынешнее оборудование не справится с новым офисом
До недавнего времени использовал машину со слабеньким процессором, 2 Г памяти, ХР и Офис 2010 - никаких затруднений не испытывал.
 
Цитата
никаких затруднений не испытывал.
Пробовал в свое время установить 2007. При любой попытке запуска офиса машина висла. Помогала только наглая перезагрузка. Я как бы уже привык в кустарных условиях работать. ))
 
Не думаю, что это из-за железа. Может быть дистрибутив плохой был?
 
Цитата
Не думаю, что это из-за железа
На домашнем ноутбуке всё работало. Но может и стал криво?!
 
По теме. Поскольку как сделать проверку я не знаю, решил пойти другим путем. Т.к. количество дней в месяцах (кроме февраля) являются константными, решил не нужное заранее закрасить и проверять только  29.02.????. Если таковое число есть, тогда не закрашиваю, ну и наоборот если такого нет. Может конечно костылем... Но уж не судите строго. ))
Код
Private Sub Worksheet_Change(ByVal Target As Range)
    If Not Intersect(Target, Range("N1")) Is Nothing Then
        If Target.Cells.Count > 1 Then Exit Sub
        If CDate(Format("28.02." & Range("N1"), "dd.mm.yyyy")) + 1 = "29.02." & Range("N1") Then
            Range("AD4").Interior.ColorIndex = xlNone
        Else
            Range("AD4").Interior.ColorIndex = 23
        End If
    End If
End Sub
 
Юрий М, раньше 2 ГБ были роскошью. Возможно у автора темы компьютеры 10 - 20 летней давности. На них действительно "Офис 2007" не шевелится.
 
Цитата
Возможно у автора темы компьютеры 10 - 20 летней давности
У меня такое чувство, что год вымирания динозавров и является годом выпуска компьютера.  :D  
 
Цитата
проблема в том, что далее мне необходимо будет циклом заполнить график значениями из формы
Цикл будет по дням с первого числа по максимальное в месяце, вот и вычисляйте  количество дней в месяце.
1,3,5,7,8,10,12 в этих месяцах 31 день
в феврале либо 28 или 29 дней
в остальных - 30 дней
 
Цитата
Цикл будет по дням с первого числа по максимальное в месяце, вот и вычисляйте  количество дней в месяце.
Вы уж меня простите, но я по неволе сам себе пса напоминаю. Логику и порядок действий понимаю, но сказать в скрипте этого не могу. Не  могу понять как объяснить экселю, что ячейка эта определенная дата и тем более, как у него спросить существует ли эта дата?
 
Ronin751, Вы макросы не пишите? Только просите сделать за Вас? Если да, то Вам не смогу объяснить. Если же делаете макросы, то не понятно, почему Вы не можете понять.
 
Цитата
существует ли эта дата?
Трудность только в феврале (28 или 29 дней), високосный ли год?
Код
Sub IsLeapYear()
Dim MaxDay As Integer
  If Month(DateSerial(Range("N1"), 2, 29)) <> 2 Then
    MaxDay = 28
  Else
    MaxDay = 29
  End If
End Sub

 
Не судите строго. Что смог.
Код
Sub Month()
    j = 1
    For i = 3 To 14
        For x = 2 To 32
            Select Case x
                Case 30, 31, 32
                    If IsDate(i - 2 & "/" & x - 1 & "/" & Range("N1")) = False Then
                    Else
                        Cells(i, x) = j
                    End If
                Case Else
                    Cells(i, x) = j
            End Select
            j = j + 1
        Next x
    Next i
End Sub
 
Kuzmich! Простите, не увидел Ваш скрипт.
Всем спасибо за помощь, советы и за легкий "нагоняй"! )))
 
Цитата
Не судите строго. Что смог.
Я бы сделал так
Код
Sub IsLeapYear()
Dim MaxDay As Integer
Dim i As Integer
Dim j As Integer
  For i = 3 To 14       'цикл по месяцам
   Select Case i - 2
    Case 1, 3, 5, 7, 8, 10, 12
      MaxDay = 31
    Case 2
     If Month(DateSerial(Range("N1"), 2, 29)) <> 2 Then
      MaxDay = 28
     Else
      MaxDay = 29
     End If
    Case Else
      MaxDay = 30
    End Select
   Next
  For j = 2 To MaxDay   'цикл по дням
  Next
End Sub
 
а зечем нужен УФ с его заливками, если известен ГОД, то можно легко изобразить количество дней в ЛЮБОМ месяце этого года.
Программисты - это люди, решающие проблемы, о существовании которых Вы не подозревали, методами, которых Вы не понимаете!
 
Цитата
а зечем нужен УФ с его заливками,
Да как бы уже и не зачем. Разве только для визуальной красоты?!
Изначально планировалось, что цвет ячейки станет условием для заполнения таблицы. Ну а теперь...
Страницы: 1
Наверх