2016-10-20 2 views
-1

У меня есть рабочий лист, который содержит много листов, и каждый содержит несколько строк с определенным цветом фона. Можно ли удалить цвет фона всех ячеек или строк, имеющих определенный цвет (желтый в моем случае) фон на листеудалить цвет фона, если цвет желтый. Excel

here is an example file

+0

лучший вариант без VBA с поиском и заменой https://www.extendoffice.com/documents/excel/2746-excel-find-and-replace-fill-color.html#a1 – Slai

+0

да Slai, это работает, по гораздо лучше, чем опция vba – khalil

ответ

0

Да, это возможно. Вы должны проверить значение Range.Interior.Color для определенного диапазона. В VBA это будет выглядеть так:

If ActiveWorksheet.Range("A1").Interior.Color = RGB(255,255,0) Then 
    'Do something 
End If 

RGB(255,255,0) желтый в этом случае. Вы можете использовать все другие значения. См. RGB Function. Для того, чтобы удалить использование цвета это:

Range("A1").Interior.Pattern = xlNone 

Если вам нужна дополнительная помощь, пожалуйста, дайте более подробную информацию о вашей проблеме и/или оставить комментарий.

Вы также можете ознакомиться с этими ссылками: Range.Interior, Interior.Color.

EDIT: в соответствии с вашими примерами вы можете удалить зеленую окраску с разных листов в столбцах «E», «F», «G» и «H». RGB зеленого цвета - RGB(146,208,80). Этот код должен делать свою работу:

Sub removeColor() 
    Dim lastRow As Long 
    Dim ws As Worksheet 
    Dim i As Long 
    Dim color As Long 
    color = RGB(146, 208, 80) 
    For Each ws In ThisWorkbook.Worksheets 
     lastRow = ws.Range("A65536").End(xlUp).Row 
     For i = 3 To lastRow 
      If ws.Range("E" & i).Interior.color = color Then 
       ws.Range("E" & i).Interior.Pattern = xlNone 
      End If 
      If ws.Range("F" & i).Interior.color = color Then 
       ws.Range("F" & i).Interior.Pattern = xlNone 
      End If 
      If ws.Range("G" & i).Interior.color = color Then 
       ws.Range("G" & i).Interior.Pattern = xlNone 
      End If 
      If ws.Range("H" & i).Interior.color = color Then 
       ws.Range("H" & i).Interior.Pattern = xlNone 
      End If 
     Next i 
    Next ws 
End Sub 

EDIT: Если вы хотите, чтобы проверить все элементы для их цвета используйте:

Sub removeColor() 
    Dim ws As Worksheet 
    Dim cell as Range 
    Dim color As Long 
    color = RGB(146, 208, 80) 
    For Each ws In ThisWorkbook.Worksheets 
     For Each cell in ws.UsedRange 
      If cell.Interior.Color = color Then 
       cell.Interior.Pattern = xlNone 
      End If 
     Next cell 
    Next ws 
End Sub 
+0

спасибо Fabian F, здесь ссылка на пример файла xlsx, который я хочу удалить из фонового рисунка из ячеек [http://www.filedropper.com/example_9] – khalil

+0

, пожалуйста, просмотрите редактирование для файла примера – khalil

+0

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

0

Это может решить Youre проблемы:

For i = 1 To Sheets.Count 
    On Error GoTo nex: 
    Sheets(i).Activate 
    For j = 1 To ActiveSheet.Cells.Find("*", SearchOrder:=xlByRows, LookIn:=xlValues, SearchDirection:=xlPrevious).Row 
     For k = 1 To ActiveSheet.Cells.Find("*", SearchOrder:=xlByColumns, LookIn:=xlValues, SearchDirection:=xlPrevious).Column 
      '65535 equals yellow 
      '5296274 equals green 
      If ActiveSheet.Cells(j, k).Interior.Color = 65535 Then ActiveSheet.Cells(j, k).Interior.Pattern = xlNone 
     Next 
    Next 
nex: 
Next 

цикл проходит через все рабочие листы и ищет обратную цвет во всех используемых ячейках.

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

MsgBox (ActiveSheet.Cells(1, 1).Interior.Color) 

Надеется, что я мог бы помочь.

+0

этот код не работает, он отправляет меня на третий лист – khalil

+0

Код идет через все листы, активизирующие их, поэтому после завершения кода вы будете на последнем листе. – FatTony

+0

Если вы хотите заменить зеленый цвет (например, в файле примера), вам нужно изменить «If ActiveSheet.Cells (j, k) .Interior.Color = 65535 Then», потому что 65535 будет соответствовать цвету желтого цвета. – FatTony

Смежные вопросы