Убрать заливку ячейки vba excel

Заливка ячейки цветом в 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

Палитра 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 снимать выделение в случае, если
заливка всей строки. А если в строке залиты несколько ячеек?

Visual Basic
1
2
3
4
5
6
7
8
9
Sub СнятьВыделение()
With ThisWorkbook.ActiveSheet
    ПоследняяСтрокаБД = .Range("C" & .Rows.Count).End(xlUp).Row    ' поиск номера последней строки
    For i = 5 To ПоследняяСтрокаБД
        ActiveSheet.Rows(i).Select
        If ActiveCell.EntireRow.Interior.ColorIndex = 3 Then ActiveCell.EntireRow.Interior.Pattern = xlNone
    Next
End With
End Sub

И как объяснить Excel-ю, что снять заливку только в диапазоне таблицы, а не за ее границами?
Заранее очень благодарна!



0



Апострофф

Заблокирован

24.09.2013, 10:21

2

Цитата
Сообщение от JulyMar
Посмотреть сообщение

снять заливку только в диапазоне таблицы, а не за ее границами?

Снимаем выделение 3-й строки таблицы j22:k29

Visual Basic
1
2
3
With Range("j22:k29")
  .Rows(3).Interior.Pattern = xlNone
End With

или всей таблицы

Visual Basic
1
.cells.Interior.Pattern = xlNone



1



3 / 3 / 0

Регистрация: 01.08.2013

Сообщений: 37

24.09.2013, 13:20

 [ТС]

3

Спасибо огромное за ответ, но я уже разобралась сама!



0



Группа: Модераторы

Ранг: Местный житель

Сообщений: 16618


Репутация:

6465

±

Замечаний:
0% ±


2003; 2007; 2010; 2013 RUS

Выбирайте любой
[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
Регистрация: 03.01.2013

у меня макрос проверяет, есть ли ячейки с формулами, содержащими ошибки и если ячейка с ошибкой, то она заливается в красный цвет :  

     Selection.SpecialCells(xlCellTypeFormulas, 16).Interior.ColorIndex = 3  

  но потом, когда я исправил ошибки, мне нужно убрать заливку с этих ячеек, т.е. сделать их без заливки. И у меня на листе есть также ячейки с постоянной заливкой другими цветами, кроме красного с кодом ColorIndex = 3. Мне нужно выделить именно с этим кодом заливки ячейки без ошибок и убрать с них заливку.  
Как это сделать не пойму, подскажите пожалуйста……….

 

запускайте последовательно  
With Selection.SpecialCells(xlCellTypeFormulas, 16).Interior  
.color = xlnone  
.ColorIndex = 3  
end with

 

zeyram

Пользователь

Сообщений: 114
Регистрация: 03.01.2013

я прописал так :  

     With Selection.SpecialCells(xlCellTypeFormulas, 16).Interior  
   With Selection.SpecialCells(xlCellTypeFormulas, 16).Color = xlNone  
   With Selection.SpecialCells(xlCellTypeFormulas, 16).ColorIndex = 3  
End With  

  но ничего не работает, полностью пожалуйста весь код как он должен выглядеть напишите, и еще учтите, что у меня сначала идет проверка условия от значения в ячейке, т.е. у меня вид такой :  

       If Range(«K228»).Value = 2 Then  
   With Selection.SpecialCells(xlCellTypeFormulas, 16).Interior  
   With Selection.SpecialCells(xlCellTypeFormulas, 16).Color = xlNone  
   With Selection.SpecialCells(xlCellTypeFormulas, 16).ColorIndex = 3  
End With  
     End If  

  а теперь можете подправить меня.

 

Вот. Скопируйте, как есть. Лишних With не добавляйте  

  Sub ert()  
‘здесь какой-то Ваш код  
On Error Resume Next ‘на случай, если не окажется формул с ошибками  
If Range(«K228»).Value = 2 Then  
   With Selection.SpecialCells(xlCellTypeFormulas, 16).Interior  
       .Color = xlNone  
       .ColorIndex = 3  
   End With  
End If  
On Error GoTo 0  
‘здесь продолжается Ваш код  
End Sub

 

zeyram

Пользователь

Сообщений: 114
Регистрация: 03.01.2013

всё равно не работает, как были красные ячейки без ошибок так они и остались.  
Я привожу пример как я прописал код :  

       If Range(«K228»).Value = 2 Then  
   With Selection.SpecialCells(xlCellTypeFormulas, 16).Interior  
   .Color = xlNone  
   .ColorIndex = 3  
   End With  
     End If  

  и вот этот код  If Range(«K228»).Value = 2 Then как раз и проверяет наличие ячеек с ошибками на листе, т.е. не нужно перед этим проверять лист. Если = 2, то значит ячейки с ошибками отстуствуют, мне только нужно выделить уже залитые красным цветом ячейки и снять с них заливку.  
что не так-то я делаю или вы???

 

Useful

Пользователь

Сообщений: 334
Регистрация: 22.12.2012

так?  
Sub errcheck()  
Dim err As Range  
If Range(«K228»).Value = 2 Then  
For Each err In Selection  
If err.HasFormula And Application.IsError(err) Then ‘if cell contain error value it’ll not apply red colour  
err.Interior.ColorIndex = 3  
Else  
err.Interior.ColorIndex = 0  
End If  
Next  
End If  
End Sub

MyExcelWorld One World One Dream!
Microsoft MVP Excel from 2012
Aydin Aliyev

 

все равно не очень понятно. если нужны ячейки с формулами без ошибок, то SpecialCells без 2-го параметра. Что-то вроде этого  

  Sub ert()  
If Range(«K228»).Value = 2 Then    ‘ ошибок точно нет  
   Selection.SpecialCells(xlCellTypeFormulas).Interior.Color = xlNone  
Else    ‘ошибки вроде как есть  
   Selection.SpecialCells(xlCellTypeFormulas, 16).Interior.ColorIndex = 3  
End If  
End Sub

 

zeyram

Пользователь

Сообщений: 114
Регистрация: 03.01.2013

всё спасибо огромное, заработало…  

  нужно было только 1 строчку вставить  

  Selection.SpecialCells(xlCellTypeFormulas).Interior.Color = xlNone

 

zeyram

Пользователь

Сообщений: 114
Регистрация: 03.01.2013

только вот работает на всех ячейках, а мне нужно только для залитых красным цветом……  

  как это сделать ?????

 

zeyram

Пользователь

Сообщений: 114
Регистрация: 03.01.2013

пишу чуть более подробный код :  

       If Range(«K228»).Value = 1 Then  
   MsgBox «ОШИБКА — в предложении есть значение с ошибкой #ЗНАЧ и пр. (ИСПРАВЬТЕ!!!)», 17, «ВНИМАНИЕ»  
   Selection.SpecialCells(xlCellTypeFormulas, 16).Interior.ColorIndex = 3  
     End If  

             If Range(«K228»).Value = 2 Then  
   Selection.SpecialCells(xlCellTypeFormulas).Interior.Color = xlNone  
     End If  

  т.е. сначала макрос проверяет и заливает ячейки с ошибкой, а вот затем мне и нужно уже залитые, но без ошибок снять с них заливку. А в ячейках с формулами, но залитых другими цветами, у меня не может быть ошибок и они мне нужны именно с такими цветами как есть.

 

zeyram

Пользователь

Сообщений: 114
Регистрация: 03.01.2013

или может мне стоит задать определённый диапазон для проверки ячеек на ошибки, исключив эти залитые ячейки другими цветами ???  
тогда напишите какой код для этого нужен, с учетом того, что диапазон будет для примера от А1 до Е8, т.е. и по строкам и по столбцам и у меня таких диапазонов будет несколько, сделайте для примера 3 диапазона А1;Е8 , J5;L9 , O7;V10

 

nilem

Пользователь

Сообщений: 837
Регистрация: 23.12.2012

вроде понятно теперь :)  

  Sub HopeLastErt()  
Dim r As Range  
If Range(«K228»).Value = 2 Then    ‘ ошибок точно нет  
   For Each r In Selection.SpecialCells(xlCellTypeFormulas)  
       If r.Interior.ColorIndex = 3 Then r.Interior.Color = xlNone  
   Next r  
End If  
End Sub  

  Useful это уже предлагал

 

да, но у меня много ячеек и этот код долго проверяет все ячейки, а вот нельзя ли применить здесь такой код    
Selection.SpecialCells(xlCellTypeFormulas).Interior.Color = xlNone  

  ведь он быстрее работает и еще как применить его или ваш этот код для нескольких заданных диапазонов ячеек, как я писал ранее ????  
буду очень благодарен…

 

zeyram

Пользователь

Сообщений: 114
Регистрация: 03.01.2013

да хорошо, сейчас сделаю вам файл для наглядного примера, подождите минут 5, хорошо ?!

 

zeyram

Пользователь

Сообщений: 114
Регистрация: 03.01.2013

#15

24.10.2012 15:02:21

вот смотрите пример

Прикрепленные файлы

  • post_373219.xlsm (24.33 КБ)

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's user avatar

Vityata

42.4k8 gold badges55 silver badges98 bronze badges

asked Aug 2, 2018 at 13:39

vba_user's user avatar

2

Using almost your code, starting with this:

enter image description here

I get this:

enter image description here

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

Vityata's user avatar

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

dv3's user avatar

dv3dv3

4,2895 gold badges26 silver badges50 bronze badges

tablename.Shading.BackgroundPatternColor = wdColorWhite

worked for me

Suraj Rao's user avatar

Suraj Rao

29.4k11 gold badges96 silver badges103 bronze badges

answered Oct 27, 2021 at 15:46

stuefi's user avatar

Понравилась статья? Поделить с друзьями:
  • Убрать заголовок страницы word
  • Убрать зависимость ячеек в excel как
  • Убрать ентеры в excel
  • Убрать дубликаты в excel google
  • Убрать дубли в excel по строкам