Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / Изменение цвета в зависимости от значения ячейки / 25 сообщений из 35, страница 1 из 2
08.06.2007, 17:34
    #34584846
Hashman
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Изменение цвета в зависимости от значения ячейки
Доброе время суток, уважаемые! ))
Есть у меня задача такая - в зависимости от значения в ячейке применить цвет к строке.. Код такой -
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
Private Sub Worksheet_SelectionChange(ByVal Target As Excel.Range)
i = ActiveCell.Interior.Color
 If Cells(Target.Row,  1 ).Value = "Выполнено" And i <>  65535  Or Cells(Target.Row,  1 ).Value = "Не утверждено" _
 And i <>  65535  Then
    Rows(Target.Row).Select
    With Selection.Interior 
        .ColorIndex =  6 
        .Pattern = xlSolid
    End With
 End If
 If Cells(Target.Row,  1 ).Value = "Открыто" And i <>  255  Then
    Rows(Target.Row).Select
    With Selection.Interior 
        .ColorIndex =  3 
        .Pattern = xlSolid
    End With
 End If
  If Cells(Target.Row,  1 ).Value = "Утверждено" And i <>  65280  Then
    Rows(Target.Row).Select
    With Selection.Interior 
        .ColorIndex =  4 
        .Pattern = xlSolid
    End With
 End If
   If Cells(Target.Row,  1 ).Value = "В работе" And i <>  16777215  Then
    Rows(Target.Row).Select
    Selection.Interior.ColorIndex = xlNone
 End If
End Sub

Вот, и проблема в том, что для того, что бы сработало, надо ввести значение (ну, или из списка выбрать), потом уйти с ячейки, а потом, что бы сработало, поставить курсор... Не подскажете ли, как можно сделать так, что бы эта штука срабатывала непосредственно после ввода? Т.е. что бы не надо было перещелкивать?
Заранее спасибо )
...
Рейтинг: 0 / 0
08.06.2007, 18:06
    #34584924
VladConn
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Изменение цвета в зависимости от значения ячейки
А что вас останавливает от использования Conditional Formatting? Есть такое в меню Format...
...
Рейтинг: 0 / 0
08.06.2007, 19:20
    #34585085
Hashman
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Изменение цвета в зависимости от значения ячейки
VladConnА что вас останавливает от использования Conditional Formatting? Есть такое в меню Format...
Да мне ж надо не одну ячейку менять, а всю строку цветом выделить...
...
Рейтинг: 0 / 0
08.06.2007, 19:31
    #34585100
VladConn
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Изменение цвета в зависимости от значения ячейки
Hashman VladConnА что вас останавливает от использования Conditional Formatting? Есть такое в меню Format...
Да мне ж надо не одну ячейку менять, а всю строку цветом выделить...

Таки что? Строка уж вам и не ранг?
...
Рейтинг: 0 / 0
08.06.2007, 19:48
    #34585129
Hashman
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Изменение цвета в зависимости от значения ячейки
VladConn Hashman VladConnА что вас останавливает от использования Conditional Formatting? Есть такое в меню Format...
Да мне ж надо не одну ячейку менять, а всю строку цветом выделить...

Таки что? Строка уж вам и не ранг?

)))
Попробовал, но чего-то все равно не получается.. Если сделать вот так:
Код: plaintext
1.
2.
3.
4.
    Selection.FormatConditions.Delete
    Selection.FormatConditions.Add Type:=xlCellValue, Operator:=xlEqual, _
        Formula1:="=""Выполнено"""
        Range(Cells(Target.Row,  1 ), Cells(Target.Row,  10 )).Select
    Selection.FormatConditions( 1 ).Interior.ColorIndex =  36 

То почему-то выделяет все равно одну ячейку - где слово написано.. Хотя selection идет на Range, и выделяется вся строка...
...
Рейтинг: 0 / 0
08.06.2007, 20:28
    #34585184
Hashman
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Изменение цвета в зависимости от значения ячейки
Вообще, может, есть применительно к моему макросу какая-то штука, которая не на выделение ячейки срабатывает, а как On Edit, т.е. по завершении ввода? Может, есть что-нибудь в этом духе? Меня бы устроило, если бы еще какая добрая душа подсказала как это должно выглядеть )))))
...
Рейтинг: 0 / 0
08.06.2007, 20:43
    #34585199
Hashman
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Изменение цвета в зависимости от значения ячейки
Упрощу тему..

Как вместо
Код: plaintext
Private Sub Worksheet_SelectionChange(ByVal Target As Excel.Range)
Написать
Код: plaintext
Private Sub Worksheet_После_ввода_данных_в_ячейку(ByVal Target As Excel.Range)
... ТОгда, по идее, будет срабатывать, только вот что писать.. ?? А, помогите кто в курсе? :)
...
Рейтинг: 0 / 0
08.06.2007, 20:46
    #34585205
VladConn
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Изменение цвета в зависимости от значения ячейки
Попробовал, но чего-то все равно не получается..
То почему-то выделяет все равно одну ячейку - где слово написано.. Хотя selection идет на Range, и выделяется вся строка...


Ну да, надо ведь, чтобы все ячейки строки получили необходимое значение для изменения формата...
...
Рейтинг: 0 / 0
08.06.2007, 20:52
    #34585215
VladConn
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Изменение цвета в зависимости от значения ячейки
А впрочем:

Скопируйте этот код:

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
Private Sub CommandButton1_Click()
  CondFormat "5:5"
End Sub

Sub CondFormat(ByVal pstrRows As String)

    With Rows(pstrRows)
        .FormatConditions.Delete
        .FormatConditions.Add Type:=xlCellValue, Operator:=xlEqual, Formula1:="=$A$1"
        .FormatConditions( 1 ).Interior.ColorIndex =  3 
        .FormatConditions.Add Type:=xlCellValue, Operator:=xlEqual, Formula1:="=$B$1"
        .FormatConditions( 2 ).Interior.ColorIndex =  39 
    End With
    
End Sub

Нажмите на кнопку и вначале вбейте двойку в А1, а потом уберите ее и вбейте двойку в B1. Цвет всей строки 5 будет меняться.
...
Рейтинг: 0 / 0
08.06.2007, 21:20
    #34585238
Hashman
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Изменение цвета в зависимости от значения ячейки
А можно уточнить кое какие вопросы? Я просто с таким кодом не сталкивался, мне не все понятно...
VladConnА впрочем:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
Private Sub CommandButton1_Click()
Т.е. сюда передать код строки, да?
End Sub
[/quot]
[SRC vba]
Sub CondFormat(ByVal pstrRows As String)
'А тут с полученными строками опрерировать, причем Formula(12345) - не адрес, 
'а возможное местоположение курсора, полученное из CommandButton1_Click, да? 
    With Rows(pstrRows)
        .FormatConditions.Delete
        .FormatConditions.Add Type:=xlCellValue, Operator:=xlEqual, Formula1:="=$A$1"
        .FormatConditions( 1 ).Interior.ColorIndex =  3 
        .FormatConditions.Add Type:=xlCellValue, Operator:=xlEqual, Formula1:="=$B$1"
        .FormatConditions( 2 ).Interior.ColorIndex =  39 
    End With
    
End Sub


И как бы мне сделать условие на 5 значений, где в они встречаются тока в одном столбце?
...
Рейтинг: 0 / 0
08.06.2007, 22:54
    #34585306
VladConn
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Изменение цвета в зависимости от значения ячейки
Т.е. сюда передать код строки, да? - передать строковое представление адреса строки как аргумента процедуры CondFormat, но не сам по себе.

Что такое Formula(12345)? У меня нет параметризированной формулы Formula.

а возможное местоположение курсора, полученное из CommandButton1_Click, да? Нет. Событие Click не дает информации о возможном положении курсора. Последнее и не требуется.

Код: plaintext
И как бы мне сделать условие на  5  значений, где в они встречаются тока в одном столбце?
Для этих целей попробуйте включить макрорекордер.
...
Рейтинг: 0 / 0
08.06.2007, 23:41
    #34585326
Hashman
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Изменение цвета в зависимости от значения ячейки
Вы знаете, на этом движке начинает получаться, на один вариант значения выглядит это дело вот так:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
Private Sub Worksheet_SelectionChange(ByVal Target As Excel.Range)
Dim pstRows As String

pstRows = Target.Row-  1 
pstRows = pstRows + ":" + pstRows 
If Cells(Target.Row -  1 , Target.Column) = "41" Then
    With Rows(pstRows)
        .FormatConditions.Delete
        .FormatConditions.Add Type:=xlCellValue, Operator:=xlEqual, Formula1:="=R1C1"
        .FormatConditions( 1 ).Interior.ColorIndex =  3 
    End With
End If
End Sub

Вот. Если на листе с этим макросом где нибудь вбить "41", то строка окрасится...
Но я столкнулся с рядом проблем:
Если нажать Enter и курсор уходит вниз, то все замечательно - я знаю, где введенное значение, но при любых других манипуляциях (таб, или просто клик где-нибудь) портят всю картину - и либо я ничего не определяю, либо ошибка...

Почему-то ячейка с самим значением цветом не выделяется. Хотя если ячейку очистить, то вся строка закрашивается... А иногда наоборот - сама ячейка окрашивается, а остальное нет...

Прошу прощения за беспокойство ))))
...
Рейтинг: 0 / 0
09.06.2007, 08:31
    #34585511
Диса
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Изменение цвета в зависимости от значения ячейки
HashmanДоброе время суток, уважаемые! ))
Есть у меня задача такая - в зависимости от значения в ячейке применить цвет к строке.. Код такой -
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
Private Sub Worksheet_SelectionChange(ByVal Target As Excel.Range)
i = ActiveCell.Interior.Color
 If Cells(Target.Row,  1 ).Value = "Выполнено" And i <>  65535  Or Cells(Target.Row,  1 ).Value = "Не утверждено" _
 And i <>  65535  Then
    Rows(Target.Row).Select
    With Selection.Interior 
        .ColorIndex =  6 
        .Pattern = xlSolid
    End With
 End If
 If Cells(Target.Row,  1 ).Value = "Открыто" And i <>  255  Then
    Rows(Target.Row).Select
    With Selection.Interior 
        .ColorIndex =  3 
        .Pattern = xlSolid
    End With
 End If
  If Cells(Target.Row,  1 ).Value = "Утверждено" And i <>  65280  Then
    Rows(Target.Row).Select
    With Selection.Interior 
        .ColorIndex =  4 
        .Pattern = xlSolid
    End With
 End If
   If Cells(Target.Row,  1 ).Value = "В работе" And i <>  16777215  Then
    Rows(Target.Row).Select
    Selection.Interior.ColorIndex = xlNone
 End If
End Sub

Вот, и проблема в том, что для того, что бы сработало, надо ввести значение (ну, или из списка выбрать), потом уйти с ячейки, а потом, что бы сработало, поставить курсор... Не подскажете ли, как можно сделать так, что бы эта штука срабатывала непосредственно после ввода? Т.е. что бы не надо было перещелкивать?
Заранее спасибо )

А имя события не пробовал поменять, например, на Calculate
...
Рейтинг: 0 / 0
09.06.2007, 10:10
    #34585616
vkodor
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Изменение цвета в зависимости от значения ячейки
Код: plaintext
1.
2.
Private Sub Worksheet_Change(ByVal Target As Range)
    MsgBox "Изменена ячейка " & Target.Address
End Sub
тебе поможет
и ещё в Target будет передоваться не только одна ячейка при вводе, но массив ячеек при копировании, пробежаться по ним можно так
Код: plaintext
1.
2.
3.
4.
5.
Private Sub Worksheet_Change(ByVal Target As Range)
    Dim rng As Range
    For Each rng In Target.Cells
        MsgBox "Изменена ячейка " & rng.Address
    Next
End Sub
...
Рейтинг: 0 / 0
09.06.2007, 10:19
    #34585629
vkodor
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Изменение цвета в зависимости от значения ячейки
без VBA Условное форматирование тоже поможет
...
Рейтинг: 0 / 0
09.06.2007, 10:23
    #34585638
Hashman
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Изменение цвета в зависимости от значения ячейки
vkodor
Код: plaintext
1.
2.
Private Sub Worksheet_Change(ByVal Target As Range)
    MsgBox "Изменена ячейка " & Target.Address
End Sub
тебе поможет


Спасибо, помогло! )))))

Огромное всем участникам СПАСИБИЩЕ! ))) Все работает при смене события, просто я не знал как это пишется .... )))))
...
Рейтинг: 0 / 0
09.06.2007, 12:10
    #34585885
silveRain
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Изменение цвета в зависимости от значения ячейки
Имхо - это все изобретение велосипеда, когда можно обойтись стандартными средствами.

Как уже говорилось - выделяешь первую строку и делаешь условоное форматирование и три условия:

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
Condition  1 : 
Formula is: =OR($A1="Выполнено",$A1="Не утверждено")

Condition  2 : 
Formula is: =$A1="Открыто"

Condition  3 : 
Formula is: =$A1="Утверждено"

Соответственоо с форматом желтого, красного и зеленого цвета.
Копируешь первую строку, и выделив весь лист вставляешь специальной вставкой форматы - и всего делов. По крайней мере я бы сделал так.
...
Рейтинг: 0 / 0
09.06.2007, 13:29
    #34586059
Hashman
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Изменение цвета в зависимости от значения ячейки
И как же применить форматы на всю строку, а не на только ячейку со значением? (О том, что там всего 3 варианта можно не упоминать, да? Т.е. понятно, что без редактора никак?) Притом, что
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
.....
pstRows = pstRows + ":" + pstRows 
If Cells(Target.Row -  1 , Target.Column) = "41" Then
    With Rows(pstRows)
        .FormatConditions.Delete
        .FormatConditions.Add Type:=xlCellValue, Operator:=xlEqual, Formula1:="=R1C1"
        .FormatConditions( 1 ).Interior.ColorIndex =  3 
    End With
End If
....
(С) Спасибо VladConn
вот это работает, но немного не так, тогда как макрос в первом сообщении при измененной Worksheet_SelectionChange на Worksheet_Change (с)vkodor, выделяет всю строку и вообще все замечательно, и никаких ограничений на количество значений. Хотя, если есть возможность обойтись стандартными средствами, это только плюс, по-моему. Но в данном конкретном случае это невозможно, имхо...
...
Рейтинг: 0 / 0
09.06.2007, 13:40
    #34586079
silveRain
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Изменение цвета в зависимости от значения ячейки
HashmanИ как же применить форматы на всю строку, а не на только ячейку со значением? (О том, что там всего 3 варианта можно не упоминать, да? Т.е. понятно, что без редактора никак?) Притом, что вот это работает, но немного не так, тогда как макрос в первом сообщении при измененной Worksheet_SelectionChange на Worksheet_Change (с)vkodor, выделяет всю строку и вообще все замечательно, и никаких ограничений на количество значений. Хотя, если есть возможность обойтись стандартными средствами, это только плюс, по-моему. Но в данном конкретном случае это невозможно, имхо...

Ну начнем с того, что в предложенном варианте задаче только три условия:
а) "выполнено" или "не утверждено" = цвет 6 (желтый)
б) "Открыто" = цвет 3 (красный)
в) "Утверждено" = цвет 4 (зеленый)
Значение "В работе", не имеющее цветового оформления, приравнивается к формату по умолчанию (можно считать это четвертым условием)

На всю строку очень замечательно ложится условное форматирование - просто выделите вначале строку целиком. А на остальные переносится при помощи AutoFill - with formatting only или специальной вставки на весь лист, как я уже говорил.

К сожалению, зарегистрироваться не могу, поэтому не могу приложить скрин.
Выложил сюда: http://image-upload.biz/files/14679a7425873a6b49090a006.jpg
...
Рейтинг: 0 / 0
09.06.2007, 13:41
    #34586084
silveRain
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Изменение цвета в зависимости от значения ячейки
Ой ;) все-таки приложился, ну что ж, так даже удобнее! :)
...
Рейтинг: 0 / 0
09.06.2007, 14:21
    #34586179
Hashman
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Изменение цвета в зависимости от значения ячейки
silveRainОй ;) ... ну что ж, так даже удобнее! :)
Ага :) Вообще супер (Я правда, уже пошел похвастался, який я зыкий макрос написал, так что теперь исключительно теоретический интерес пошел ))))))
Но правда, почему-то с OR формула у меня не работает.. Я уже голову сломал - может, буквы не те, вместо
Код: plaintext
=OR($D2="Выполнено";$D2="Не утверждено")
поставил
Код: plaintext
=OR($D1="1";$D1="2")
... ни определяет и все тут...

Формулу сделал в отдельной ячейке (мало ли, с орфографией накосячил) - тот же результат - значения из этого поля не окрашиваются и все тут....
...
Рейтинг: 0 / 0
09.06.2007, 14:24
    #34586189
silveRain
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Изменение цвета в зависимости от значения ячейки
Hashman
Код: plaintext
=OR($D2="Выполнено";$D2="Не утверждено")
поставил
Код: plaintext
=OR($D1="1";$D1="2")
... ни определяет и все тут...

Ошибка в точке с запятой, по-моему - в качестве разделителя должна быть просто запятая
...
Рейтинг: 0 / 0
09.06.2007, 14:28
    #34586205
Hashman
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Изменение цвета в зависимости от значения ячейки
silveRain
Ошибка в точке с запятой, по-моему - в качестве разделителя должна быть просто запятая

Не-а.. у меня на запятую ругается... А точку с запятой поставил мастер формул (типа выберите значение ___ и ___ для формулы "ИЛИ")... А.. и я еще накосячил тут слегка - поставил формулы с разных строк, но на самом деле там такого нет ))))
...
Рейтинг: 0 / 0
09.06.2007, 14:33
    #34586222
Hashman
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Изменение цвета в зависимости от значения ячейки
А, все, отбой! ))) Если написать вот так =
Код: plaintext
=ИЛИ($D1= 1 ;$D1= 2 )
то работает )))
А если буквы, то вот так
Код: plaintext
=ИЛИ($D1="Ништяк";$D1= 2 )

Здорово! )))
...
Рейтинг: 0 / 0
09.06.2007, 14:35
    #34586227
Диса
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Изменение цвета в зависимости от значения ячейки
HashmanА, все, отбой! ))) Если написать вот так =
Код: plaintext
=ИЛИ($D1= 1 ;$D1= 2 )
то работает )))
А если буквы, то вот так
Код: plaintext
=ИЛИ($D1="Ништяк";$D1= 2 )

Здорово! )))

Можно совет?
...
Рейтинг: 0 / 0
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / Изменение цвета в зависимости от значения ячейки / 25 сообщений из 35, страница 1 из 2
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]