Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
курсовая / Источники / excel_2010_professionalnoe_programmirovanie_na_vba_RuLit_Me_412629.pdf
Скачиваний:
4
Добавлен:
27.09.2025
Размер:
22.97 Mб
Скачать

Глава

Работа с цветом

Вэтой главе...

Определение цвета

Оттенки серого

Экспериментирование с цветами

Темы документа

Работа с фигурами

Изменение цветов диаграммы

В главе рассматриваются вопросы работы с цветом в Excel 2010.

Определение цвета

Работа с цветом в Excel 2010 не относится к категории тривиальных задач. Более то­ го, она достаточно сложна. Зачастую написанный вами макрос, который должен изме­ нять цвет ячейки или объекта, не оправдывает возложенных на него надежд. Поэтому, чтобы избежать разочарований в дальнейшем, прочтите эту главу.

Одним из наиболее существенных изменений в Excel 2007 явился отказ от ограни­ ченной палитры, состоящей из 56 цветов. Этот ограниченный набор цветов применялся для раскрашивания фона ячеек, оформления текста и диаграмм. Конечно, можно было изменить эти цвета, но не существовало способа расширить набор из 56 цветов, приме­ няемых для оформления рабочей книги.

Но все течет и меняется. С появлением Excel 2007 количество цветов, применяемых для оформления рабочей книги, стало практически неограниченным. Конечно, предел существует, но он настолько велик (16 777 216 цветов), что можно считать количество цветов неограниченным.

В VBA цвет задается с помощью десятичного значения цвета, которое может изме­ няться от 0 до 16777215. Ниже приводится оператор VBA, с помощью которого для фона выбирается темный красно-коричневый цвет.

A c tiv e C e ll. I n t e r i o r . C o lo r = 5911168

850

Часть VII. Дополнительные темы

Также для чаще всего применяемых цветов в VBA имеются предопределенные кон­ станты. Например, значение константы v b R e d равно 2 5 5 (десятичное значение, соот­ ветствующее красному цвету), а константа v b G r e e n имеет значение 6 5 2 8 0.

Чтобы определить около 17 миллионов цветов, потребуется соответствующее коли­ чество констант, запомнить которые не в состоянии никто. Поэтому для определения цвета используют процентные соотношения красного, зеленого и синего цветов — цве­ товую модель RGB.

Цветовая модель RGB

Цветовая система RGB представляет собой комбинацию различных по интенсивности красного, зеленого и синего цветов. Значение каждого из этих цветов изменяется в диа­ пазоне от 0 до 255. Общее количество возможных цветов подсчитывается по формуле 256x256x256 = 16 777 216. Если значения всех цветовых компонентов равны 0, получаем чисто черный цвет. Если же величины всех компонентов равны 255, на выходе имеем аб­ солютно белый цвет. Если же величины компонентов равны 128 (середина диапазона), получаем нейтральный серый цвет. Оставшиеся 16 777 213 комбинаций представляют все остальные цвета.

Для определения цвета с помощью цветовой модели RGB применяется функция VBA под названием RGB . Эта функция принимает три аргумента, которые представляют крас­ ный, зеленый и синий компоненты цвета. В результате ее выполнения возвращается де­ сятичное значение цвета.

В п риведенном ниж е операторе и спользуется ф ункция R G B для определения цвета,

кото р ы й и спользовался в п ред ы д ущ ем разделе (тем н ы й красн о -кори чн евы й , значение 5 9 1 1 1 6 8 ) .

A c t iv e C e ll. I n t e r i o r . C o lo r = RGB(128, 50, 90)

В табл. 30.1 приведены значения RGB и десятичные значения цвета для некоторых часто применяемых цветов.

Таблица 3 0 .1 . П рим еры определения цвета

 

 

Имя

Красный

Зеленый

Синий

Значение

B la c k (Черный)

компонент

компонент

компонент

цвета

0

0

0

0

W h ite (Белый)

255

255

255

16777215

Red (Красный)

255

0

0

255

G reen(Зеленый)

0

255

0

65280

Blue (Синий)

0

0

255

16711680

Y ellow (Желтый)

255

255

0

65535

P ink (Розовый)

255

0

255

16711935

Turquoise (Бирюзовый)

0

255

255

16776960

Brown (Коричневый)

153

51

0

13209

in d ig o (Темно-синий)

51

51

153

10040115

80% Gray (80% серый)

51

51

51

3355443

852

Часть VII. Дополнительные темы

Для выполнения подобного преобразования с помощью формулы рабочего листа соз­ дайте следующую функцию-оболочку VBA:

F u n c tio n RGB2DECIMAL(R, G, В)

'Преобразование из RGB в десятичное значение цвета RGB2DECIMAL = RGB(R, G, В)

End F u n c tio n

В следующем примере функции рабочего листа предполагается, что три значения цвета находятся в ячейках А1:С1.

=RGB2DECIMAL(A l , В1, C l)

Процедура преобразования десятичного значения цвета в красный, зеленый и синий компоненты цвета более сложная. Ниже приводится пример функции, которая возвраща­ ет значения этих компонентов в виде трехэлементного массива.

F u n c tio n DECIMAL2RGB(ColorVal)

As

V a ria n t

 

 

'

Преобразует

значение цвета в

триплет

RGB

 

1

Возвращает

3 - элементный массив

типа

V a ria n t

 

DECIMAL2RGB

= A rra y (C o lo rV a l

\

256 А

0

And

255,

End

C o lo rV a l

\ 256 А 1 And 255,

C o lo rV a l

\

256 А 2 And 255)

F u n c tio n

 

 

 

 

 

 

Для использования функции D E C IM A L 2 R G B в составе формулы рабочего листа сле­ дует вводить эту формулу в виде формулы массива, состоящего из трех ячеек. Например, предположим, что ячейка А1 содержит десятичное значение цвета. Для преобразования цветового значения в эквивалентные компоненты RGB выберите горизонтальный диапа­ зон, состоящий из трех ячеек, а затем введите указанную ниже формулу. Нажмите ком­ бинацию клавиш <Ctrl+Shift+Enter> для создания формулы массива, не используя при этом фигурных скобок.

{ =DECIMAL2RGB(A l)}

Если используется вертикальный массив, состоящий из трех ячеек, следует транспо­ нировать массив, как показано ниже.

{=TRANSPOSE(DECIMAL2RGB(Al))}

На рис. 30.2 показан результат выполнения функции DECIMAL2RGB.

К о м п а к т-д и ск

На прилагаемом компакт-диске в файле c o lo r c o n v e rs io n fu n c tio n s , xlsm находится рабочая книга, включающая следующие функции преобразо­ вания цвета: DECIMAL2RGB, DECIMAL2HSL, HSL2RGB, RGB2DECIMAL, RGB2HSL

ИHSL2DECIMAL.

Десятичны е значения цвета

Умногих пользователей возникает вопрос о том, каким образом распределяются 16 777 216 десятичных значений цвета. Значение о соответствует черному цвету, зна­

чение 16777216 — белому цвету, а что можно сказать о промежуточных цветах?

Чтобы получить представление обо всех десятичных значениях цвета, воспользуйтесь указанным ниже кодом, который построен на основе двух вложенных циклов F or-N ext.

Sub G e n e ra te C o lo rV a lu e s ()

Green

As Long

Dim

Red As Long,

B lue As Long,

Dim

A llC o lo r s (0

To 16777215) As

Long

 

Dim

ColorNum As

Long

 

 

854 Часть VII. Дополнительные темы

Цвета образуются путем смешивания красного, зеленого и синего компонентов. Чер­

ному цвету соответствует результат выполнения функции RGB (0,

0, 0),

белому —

RGB (255, 255, 255), нейтрально-серому— RGB(128, 128,

12 8).

Благодаря

использованию этой функции генерируется 256 оттенков серого цвета.

Для создания в диапазоне ячеек шкалы серого цвета, состоящей из 256 оттенков, ис­ пользуется указанная ниже процедура. В результате ее выполнения в различные оттенки серого цвета (от черного до белого) окрашивается фон ячеек, находящихся в диапазоне от А1 до А256. Для просмотра всего диапазона можно уменьшить масштаб.

Sub

G e ne ra te G ra yS ca le ()

 

Dim

г

As

Long

 

 

For

r

=

0

To

255

 

C e lls ( r

+

1, 1 ) . I n t e r i o r . C o lo r = RGB(r , r , r)

 

N ext

 

r

 

 

 

End

Sub

 

 

 

 

 

На рис. 30.3 показан результат заливки увеличенных ячеек градациями серого цвета.

П реобразование цветов в оттенки серого

Преобразовать цвет в оттенки серого можно путем усреднения значений красного, зеленого и синего компонентов цвета, причем полученному серому цвету будет соответ­ ствовать единственное значение. При этом не учитывается то, что различные цвета вос­ принимаются человеческим глазом по-разному. Например, зеленый цвет кажется ярче красного, а красный — ярче синего.

В процессе экспериментов по восприятию цвета был выработан следующий “рецепт”, предписывающий преобразование цветовых значений RGB в оттенки серого:

28,7% красного компонента;

58,9% зеленого компонента;

11,4% синего компонента.

В качестве примера р ассм отри м цветовое значение 1 6 7 5 1 0 0 1 (оттенок ф иолетового цвета), которое соответствует значению R G B ( 1 5 3 , 1 5 3 , 2 5 5 ) . У ч и ты в ая рассм от­ ренные ранее соображ ения, п олучи м следую щ ие значения RGB:

красный: 28,7%. 153 = 44;

зеленый: 58,9%. 153 = 90;

синий: 11,4%.255 = 29.

Сумма этих значений равна 163. Таким образом, значение RGB в оттенках серого, соответствующее цветовому значению 16751001, равно R G B (163, 163, 163).

Ниже приведен код функции VBA, в качестве аргумента которой принимается деся­ тичное значение цвета. В результате ее выполнения возвращается десятичное значение серого цвета.

F u n c tio n

G ra y s c a le (c o lo r)

 

 

 

Dim

r As Long, gAs Long,b As

Long

r

=

(c o lo r

\

256

A

0 And

255)

*

0.287

g

=

( c o lo r

\

256

*

1 And

255)

*

0.589

b

=

( c o lo r

\

256

A

2 And

255)

*

0.114

G ra ysca le

=

RGB(r

 

+ g + b ,

r + g + b , r + g + b)

End

F u n c tio n