Поиск  Пользователи  Правила 
Закрыть
Логин:
Пароль:
Забыли свой пароль?
Регистрация
Войти
 
Страницы: 1
RSS
Убрать заливку ячеек из столбика D кроме светло-зеленого
 
Доброго времени суток, ячейки столбика D закрашены разными цветами, а некоторые не имеют заливки. Требуется оставить заливку ячеек светло-зеленого цвет( RGB(153,  255, 153)), остальные без заливки. Как это можно сделать с помощью макроса?
Изменено: MultiFlex - 26 Мар 2015 10:54:41
 
Записать макрорекодером не пробовали?
 
Цветов
Цитата
vikttur написал: Записать макрорекодером не пробовали?
Кроме светло-зеленого 10-15 различных заливок, и каждый месяц, тот, кто их "закрашивает", может в следующем отчете применять совсем другие. А ячейки светло-зеленого цвета можно попросить красить только в один цвет,  #99ff99 или 43 цвет.
Может как-то можно автофильтром, типа критерий1:= <> светло-зеленому?  
Изменено: MultiFlex - 26 Мар 2015 11:06:45
 
Макрорекодером находите нужный цвет.
Циклом по ячейкам:
Код
For i = 1 To [I]много[/I]
    If Not (Cells().Interior.Color=нужныйцвет) Then очистить
Next i
 
vikttur, смотрю я на этот код, как баран на новые ворота, можно чуть поподробнее? Как программист C# в прошлом, я вижу, что тут все просто, но из-за незнания языка BVA мне сложно разобраться. Заранее спасибо.
 
Закоренелые программисты правил не читают? Файл-пример?
 
Файл-пример ниже, только строк почти в 80 раз больше. Как видите, в столбике D  4 светло-зеленые ячейки, все остальные ячейки всего листа  хотелось бы сделать без заливки. Проблемы, конечно же, со столбиком D.
 
Лучше найти ячейки с нужным цветом, потом обесцветить все, потом вернуть цвет.
Код
Sub MultiFlex()
Dim r As Range, c As Range, col&
col = &H66FF99 'этот светло-зеленый
On Error GoTo 1
For Each c In Intersect(ActiveSheet.UsedRange, Columns("D"))
  If c.Interior.Color = col Then Set r = Union(r, c)
2 Next
Cells.Interior.ColorIndex = xlColorIndexNone
r.Interior.Color = col
Exit Sub

1 Set r = c: Resume 2
End Sub
 
Казанский Все ячейки обесцвечиваются, а дальше Excel зависает, будто цикл вечный.
 
Значит, не находит. Похоже, .Color разный на разных компах, поэтому лучше брать цвет из активной ячейки:
Код
Sub MultiFlex()
Dim r As Range, c As Range, col&
If ActiveCell.Column <> 4 Then
  MsgBox "Выделите в ст. D ячейку с нужным цветом и запустите снова."
  Exit Sub
End If
Set r = ActiveCell
col = r.Interior.Color
For Each c In Intersect(ActiveSheet.UsedRange, Columns("D"))
  If c.Interior.Color = col Then Set r = Union(r, c)
Next
Cells.Interior.ColorIndex = xlColorIndexNone
r.Interior.Color = col
End Sub
 
Казанский спасибо, все работает.  
Страницы: 1
Читают тему (гостей: 1)