Как сделать чтобы в ячейке шрифт выделялся нужным цветом.

Программирование на Visual Basic for Applications
Rubinus
Начинающий
Начинающий
 
Сообщения: 17
Зарегистрирован: 04.07.2004 (Вс) 21:28

Как сделать чтобы в ячейке шрифт выделялся нужным цветом.

Сообщение Rubinus » 31.10.2004 (Вс) 14:50

Как сделать чтобы в ячейке шрифт выделялся нужным цветом согласно определенному условию.
Пример:
Допустим есть диапазон ячек А1:A300 в которых значения меняются, если А1=Текст1 то B1
должно стать красным, если А1=Текст2 то B1 зеленым цветом, если A1=Текст3 то B1 желтым,
если A1=Текст4 то B1 белым, если A1=Текст5 то B1 черным.
Bona mente...

RayShade
Scarmarked
Scarmarked
Аватара пользователя
 
Сообщения: 5511
Зарегистрирован: 02.12.2002 (Пн) 17:11
Откуда: Russia, Saint-Petersburg

Сообщение RayShade » 31.10.2004 (Вс) 15:12

Ищи в справочнике Conditional formatting, это тебя спасет.
I don't understand. Sorry.

Rubinus
Начинающий
Начинающий
 
Сообщения: 17
Зарегистрирован: 04.07.2004 (Вс) 21:28

Сообщение Rubinus » 31.10.2004 (Вс) 16:57

В каком справочнике, если по VBA который в Excel то там такого нет.
Bona mente...

Lider
Новичок
Новичок
 
Сообщения: 40
Зарегистрирован: 02.06.2004 (Ср) 15:44
Откуда: Москва

Сообщение Lider » 01.11.2004 (Пн) 10:02

Dim Text1 As String
Dim Text2 As String
Dim Text3 As String
Dim Text4 As String
Dim Text5 As String
Dim St As String
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
Text1 = "Text1"
Text2 = "Text2"
Text3 = "Text3"
Text4 = "Text4"
Text5 = "Text5"

For y = 1 To 300
St = Cells(y, 1).Value
Select Case St
Case Text1
Cells(y, 2).Font.Color = vbGreen
Case Text2
Cells(y, 2).Font.Color = vbRed
Case Text3
Cells(y, 2).Font.Color = vbBlue
Case Text4
Cells(y, 2).Font.Color = vbMagenta
Case Text5
Cells(y, 2).Font.Color = vbCyan
Case Else
Cells(y, 2).Font.Color = vbBlack
End Select
Next
End Sub

Но при каждой смене выделения на листе тормоза - около секунды...
А другуго выхода я не вижу!
Может кто грамотнее подскажет?
Есть 10 тпов людей:
Одни понимают двоичную систему исчисления,
Другие нет!

RayShade
Scarmarked
Scarmarked
Аватара пользователя
 
Сообщения: 5511
Зарегистрирован: 02.12.2002 (Пн) 17:11
Откуда: Russia, Saint-Petersburg

Сообщение RayShade » 01.11.2004 (Пн) 10:47

Я ясно выразился по моему. Справочник, КОТОРЫЙ ПРОСОТЙ ХЕЛПНИК ДЛЯ EXCEL, VBA тут не при чем совсем. И в нем надо искать Conditional Formating, или Условное Форматирование. Или что в меню Format посмотреть и найти там этот пункт сложно очень?
I don't understand. Sorry.

Lider
Новичок
Новичок
 
Сообщения: 40
Зарегистрирован: 02.06.2004 (Ср) 15:44
Откуда: Москва

Сообщение Lider » 01.11.2004 (Пн) 11:04

В условном форматировании максимум три условия , а тут насколько я понимаю их должно быть 5 , а может быть и больше !
Плюс ко всему Условное Форматирование форматирует ту ячейку в которой установлено сравнивая ее значение со значениями других ячеек, а здесь по значению одной ячейки нужно форматировать другую !
ИЛИ Я ЧЕГО ТО НЕ ДОПОНЯЛ ?
Есть 10 тпов людей:
Одни понимают двоичную систему исчисления,
Другие нет!

Rubinus
Начинающий
Начинающий
 
Сообщения: 17
Зарегистрирован: 04.07.2004 (Вс) 21:28

Сообщение Rubinus » 01.11.2004 (Пн) 11:09

Lider все правильно, условное форматирование мне не подходит во первых из-за 3 условий и есть другие моменты которые меня не устраивают.
Bona mente...

Lider
Новичок
Новичок
 
Сообщения: 40
Зарегистрирован: 02.06.2004 (Ср) 15:44
Откуда: Москва

Сообщение Lider » 01.11.2004 (Пн) 11:54

Ну так я дал код - другого ответа я не знаю !
Может кто проще сделает?
У сильно тормозит на 300 ячеек !

А если на весь лист забабахать ?!!!
ВАЩЕ ПОВИСНЕТ!!!!!!!!!!!! (ЕСЛИ DoEvents- не поставить, но тогда долго будет форматировать !)
Есть 10 тпов людей:
Одни понимают двоичную систему исчисления,
Другие нет!

Rubinus
Начинающий
Начинающий
 
Сообщения: 17
Зарегистрирован: 04.07.2004 (Вс) 21:28

Сообщение Rubinus » 01.11.2004 (Пн) 13:06

Мне посоветовали этот:

Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Count = 1 Then
Select Case Target.Value
Case "Попса": Target.Font.ColorIndex = 5
...
...
...
...
Case "Эстрада": Target.Font.ColorIndex = 45
End Select
End If
End Sub
Bona mente...

Lider
Новичок
Новичок
 
Сообщения: 40
Зарегистрирован: 02.06.2004 (Ср) 15:44
Откуда: Москва

Сообщение Lider » 01.11.2004 (Пн) 13:34

было бы здорово - и я тоже думал об этом , но в Target содержится
Выделенная ячейка , а не ячейка с которой снято выделение, но это мне подсказывает такой вариант :
Уррааа! решение найдено!
Dim Ran As Range



Private Sub Worksheet_SelectionChange(ByVal Target As Range)
If Ran = Null Then
Ran = Target
End If

If Ran.Count = 1 Then
Select Case Target.Value
Case "Ïîïñà": Target.Font.ColorIndex = 5

Case "Ýñòðàäà": Target.Font.ColorIndex = 45
End Select
End If
Ran = Target


End Sub
вот так процедура будет проверять ячейку, с которой снято выделение,

Только насколько я помню тебе требовалосьФорматировать соседнюю ячейку а не проверяемую:
Тогда полазь в справке по теме Target.address
Внимание
Сранение Ran.Count- не нужно т.к.
я могу выделить несколько ячеек, и изменять в них значения, потом снять выделение- варианта два: либо проверять не выделенные ячейки а активные , либо делать
Код: Выделить всё
For each с in selection.cells
.......

Так что твори......
Есть 10 тпов людей:
Одни понимают двоичную систему исчисления,
Другие нет!

Rubinus
Начинающий
Начинающий
 
Сообщения: 17
Зарегистрирован: 04.07.2004 (Вс) 21:28

Сообщение Rubinus » 01.11.2004 (Пн) 17:20

Только вот проблема:
У меня в листе в который я вставляю данный код уже есть код
другого макроса этот я вставляю ниже того который есть и при вводе слова "Попса" выдается ошибка:
Compile Error:
Ambiguous name detected: Worksheet_Change

А если удалить макрос который находится выше то этот работает номально, как сделать чтобы эти 2 макроса уживались на одном листе?
Bona mente...

Igor_123
Осторожный Баянист
Осторожный Баянист
Аватара пользователя
 
Сообщения: 1325
Зарегистрирован: 21.07.2004 (Ср) 13:00
Откуда: Днепропетровск

Сообщение Igor_123 » 08.11.2004 (Пн) 11:26

Поместить оба кода в разные функции и вызывать их из Worksheet_Change


Вернуться в VBA

Кто сейчас на конференции

Сейчас этот форум просматривают: Google-бот, Yandex-бот и гости: 64

    TopList