Заливка ячейки цветом в VBA Excel. Фон ячейки. Свойства .Interior.Color и .Interior.ColorIndex. Цветовая модель RGB. Стандартная палитра. Очистка фона ячейки.
Свойство .Interior.Color объекта Range
Начиная с Excel 2007 основным способом заливки диапазона или отдельной ячейки цветом (зарисовки, добавления, изменения фона) является использование свойства .Interior.Color объекта Range путем присваивания ему значения цвета в виде десятичного числа от 0 до 16777215 (всего 16777216 цветов).
Заливка ячейки цветом в VBA Excel
Пример кода 1:
Sub ColorTest1() Range(«A1»).Interior.Color = 31569 Range(«A4:D8»).Interior.Color = 4569325 Range(«C12:D17»).Cells(4).Interior.Color = 568569 Cells(3, 6).Interior.Color = 12659 End Sub |
Поместите пример кода в свой программный модуль и нажмите кнопку на панели инструментов «Run Sub» или на клавиатуре «F5», курсор должен быть внутри выполняемой программы. На активном листе Excel ячейки и диапазон, выбранные в коде, окрасятся в соответствующие цвета.
Есть один интересный нюанс: если присвоить свойству .Interior.Color отрицательное значение от -16777215 до -1, то цвет будет соответствовать значению, равному сумме максимального значения палитры (16777215) и присвоенного отрицательного значения. Например, заливка всех трех ячеек после выполнения следующего кода будет одинакова:
Sub ColorTest11() Cells(1, 1).Interior.Color = —12207890 Cells(2, 1).Interior.Color = 16777215 + (—12207890) Cells(3, 1).Interior.Color = 4569325 End Sub |
Проверено в Excel 2016.
Вывод сообщений о числовых значениях цветов
Числовые значения цветов запомнить невозможно, поэтому часто возникает вопрос о том, как узнать числовое значение фона ячейки. Следующий код VBA Excel выводит сообщения о числовых значениях присвоенных ранее цветов.
Пример кода 2:
Sub ColorTest2() MsgBox Range(«A1»).Interior.Color MsgBox Range(«A4:D8»).Interior.Color MsgBox Range(«C12:D17»).Cells(4).Interior.Color MsgBox Cells(3, 6).Interior.Color End Sub |
Вместо вывода сообщений можно присвоить числовые значения цветов переменным, объявив их как Long.
Использование предопределенных констант
В VBA Excel есть предопределенные константы часто используемых цветов для заливки ячеек:
Предопределенная константа | Наименование цвета |
---|---|
vbBlack | Черный |
vbBlue | Голубой |
vbCyan | Бирюзовый |
vbGreen | Зеленый |
vbMagenta | Пурпурный |
vbRed | Красный |
vbWhite | Белый |
vbYellow | Желтый |
xlNone | Нет заливки |
Присваивается цвет ячейке предопределенной константой в VBA Excel точно так же, как и числовым значением:
Пример кода 3:
Range(«A1»).Interior.Color = vbGreen |
Цветовая модель RGB
Цветовая система RGB представляет собой комбинацию различных по интенсивности основных трех цветов: красного, зеленого и синего. Они могут принимать значения от 0 до 255. Если все значения равны 0 — это черный цвет, если все значения равны 255 — это белый цвет.
Выбрать цвет и узнать его значения RGB можно с помощью палитры Excel:
Палитра Excel
Чтобы можно было присвоить ячейке или диапазону цвет с помощью значений RGB, их необходимо перевести в десятичное число, обозначающее цвет. Для этого существует функция VBA Excel, которая так и называется — RGB.
Пример кода 4:
Range(«A1»).Interior.Color = RGB(100, 150, 200) |
Список стандартных цветов с RGB-кодами смотрите в статье: HTML. Коды и названия цветов.
Очистка ячейки (диапазона) от заливки
Для очистки ячейки (диапазона) от заливки используется константа xlNone
:
Range(«A1»).Interior.Color = xlNone |
Свойство .Interior.ColorIndex объекта Range
До появления Excel 2007 существовала только ограниченная палитра для заливки ячеек фоном, состоявшая из 56 цветов, которая сохранилась и в настоящее время. Каждому цвету в этой палитре присвоен индекс от 1 до 56. Присвоить цвет ячейке по индексу или вывести сообщение о нем можно с помощью свойства .Interior.ColorIndex:
Пример кода 5:
Range(«A1»).Interior.ColorIndex = 8 MsgBox Range(«A1»).Interior.ColorIndex |
Просмотреть ограниченную палитру для заливки ячеек фоном можно, запустив в VBA Excel простейший макрос:
Пример кода 6:
Sub ColorIndex() Dim i As Byte For i = 1 To 56 Cells(i, 1).Interior.ColorIndex = i Next End Sub |
Номера строк активного листа от 1 до 56 будут соответствовать индексу цвета, а ячейка в первом столбце будет залита соответствующим индексу фоном.
Подробнее о стандартной палитре Excel смотрите в статье: Стандартная палитра из 56 цветов, а также о том, как добавить узор в ячейку.
JulyMar 3 / 3 / 0 Регистрация: 01.08.2013 Сообщений: 37 |
||||
1 |
||||
Снять выделение цветом отдельных ячеек диапазона24.09.2013, 09:30. Показов 28232. Ответов 2 Метки нет (Все метки)
Здравствуйте!
И как объяснить Excel-ю, что снять заливку только в диапазоне таблицы, а не за ее границами?
0 |
Заблокирован |
||||||||
24.09.2013, 10:21 |
2 |
|||||||
снять заливку только в диапазоне таблицы, а не за ее границами? Снимаем выделение 3-й строки таблицы j22:k29
или всей таблицы
1 |
3 / 3 / 0 Регистрация: 01.08.2013 Сообщений: 37 |
|
24.09.2013, 13:20 [ТС] |
3 |
Спасибо огромное за ответ, но я уже разобралась сама!
0 |
|
Группа: Модераторы Ранг: Местный житель Сообщений: 16618
Замечаний: |
Выбирайте любой
[vba]
Код
Range(«A1»).Interior.Pattern = xlNone
Range(«A2»).Interior.Color = xlNone
Range(«A3»).Interior.ColorIndex = 0
[/vba]
Можно еще поизвращаться. Но Color, думаю, правильней будет
Скажи мне, кудесник, любимец ба’гов…
Платная помощь:
Boroda_Excel@mail.ru
Яндекс-деньги: 41001632713405 | Webmoney: R289877159277; Z102172301748; E177867141995
zeyram Пользователь Сообщений: 114 |
у меня макрос проверяет, есть ли ячейки с формулами, содержащими ошибки и если ячейка с ошибкой, то она заливается в красный цвет : Selection.SpecialCells(xlCellTypeFormulas, 16).Interior.ColorIndex = 3 но потом, когда я исправил ошибки, мне нужно убрать заливку с этих ячеек, т.е. сделать их без заливки. И у меня на листе есть также ячейки с постоянной заливкой другими цветами, кроме красного с кодом ColorIndex = 3. Мне нужно выделить именно с этим кодом заливки ячейки без ошибок и убрать с них заливку. |
запускайте последовательно |
|
zeyram Пользователь Сообщений: 114 |
я прописал так : With Selection.SpecialCells(xlCellTypeFormulas, 16).Interior но ничего не работает, полностью пожалуйста весь код как он должен выглядеть напишите, и еще учтите, что у меня сначала идет проверка условия от значения в ячейке, т.е. у меня вид такой : If Range(«K228»).Value = 2 Then а теперь можете подправить меня. |
Вот. Скопируйте, как есть. Лишних With не добавляйте Sub ert() |
|
zeyram Пользователь Сообщений: 114 |
всё равно не работает, как были красные ячейки без ошибок так они и остались. If Range(«K228»).Value = 2 Then и вот этот код If Range(«K228»).Value = 2 Then как раз и проверяет наличие ячеек с ошибками на листе, т.е. не нужно перед этим проверять лист. Если = 2, то значит ячейки с ошибками отстуствуют, мне только нужно выделить уже залитые красным цветом ячейки и снять с них заливку. |
Useful Пользователь Сообщений: 334 |
так? MyExcelWorld One World One Dream! |
все равно не очень понятно. если нужны ячейки с формулами без ошибок, то SpecialCells без 2-го параметра. Что-то вроде этого Sub ert() |
|
zeyram Пользователь Сообщений: 114 |
всё спасибо огромное, заработало… нужно было только 1 строчку вставить Selection.SpecialCells(xlCellTypeFormulas).Interior.Color = xlNone |
zeyram Пользователь Сообщений: 114 |
только вот работает на всех ячейках, а мне нужно только для залитых красным цветом…… как это сделать ????? |
zeyram Пользователь Сообщений: 114 |
пишу чуть более подробный код : If Range(«K228»).Value = 1 Then If Range(«K228»).Value = 2 Then т.е. сначала макрос проверяет и заливает ячейки с ошибкой, а вот затем мне и нужно уже залитые, но без ошибок снять с них заливку. А в ячейках с формулами, но залитых другими цветами, у меня не может быть ошибок и они мне нужны именно с такими цветами как есть. |
zeyram Пользователь Сообщений: 114 |
или может мне стоит задать определённый диапазон для проверки ячеек на ошибки, исключив эти залитые ячейки другими цветами ??? |
nilem Пользователь Сообщений: 837 |
вроде понятно теперь Sub HopeLastErt() Useful это уже предлагал |
да, но у меня много ячеек и этот код долго проверяет все ячейки, а вот нельзя ли применить здесь такой код ведь он быстрее работает и еще как применить его или ваш этот код для нескольких заданных диапазонов ячеек, как я писал ранее ???? |
|
zeyram Пользователь Сообщений: 114 |
да хорошо, сейчас сделаю вам файл для наглядного примера, подождите минут 5, хорошо ?! |
zeyram Пользователь Сообщений: 114 |
#15 24.10.2012 15:02:21 вот смотрите пример Прикрепленные файлы
|
I have a simple table and want to remove fill (restore default background color) using VBA.
This is my code:
Function cleanTable(tableName As String)
Dim i As Long
Dim table As ListObject: Set table = ThisWorkbook.Worksheets("Sheet1").ListObjects(tableName)
For i = 1 To table.DataBodyRange.Rows.Count
table.ListRows(i).Range.Interior.Pattern = 0
Next i
End Function
But I am receiving the error:
Application defined or object defined error
And have no idea how to solve it.
Will be really thankful for your support
Vityata
42.4k8 gold badges55 silver badges98 bronze badges
asked Aug 2, 2018 at 13:39
2
Using almost your code, starting with this:
I get this:
Without getting any error. How are you calling the function exactly? This is what I have used:
Sub TestMe()
cleanTable "myTable"
End Sub
Function cleanTable(tableName As String)
Dim i As Long
Dim table As ListObject
Set table = ThisWorkbook.Worksheets(1).ListObjects(tableName)
For i = 1 To table.DataBodyRange.Rows.Count
table.ListRows(i).Range.Interior.Pattern = 0
Next i
End Function
answered Aug 2, 2018 at 13:51
VityataVityata
42.4k8 gold badges55 silver badges98 bronze badges
You can reset to the default background with:
Range("A1").Interior.ColorIndex = xlColorIndexNone
…if that’s what you’re asking
answered Aug 2, 2018 at 13:55
dv3dv3
4,2895 gold badges26 silver badges50 bronze badges
tablename.Shading.BackgroundPatternColor = wdColorWhite
worked for me
Suraj Rao
29.4k11 gold badges96 silver badges103 bronze badges
answered Oct 27, 2021 at 15:46