Excel — Блокировка ячеек по цвету?

Excel — Блокировка ячеек по цвету?

У меня есть таблица Excel, в которой я хочу защитить некоторые ячейки от форматирования и редактирования. Все эти ячейки окрашены в определенный цвет.

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

Есть ли способ заставить Excel заблокировать ячейки определенного цвета?

решение1

Да, с помощью VBa... Просто скопируйте это в «ThisWorkbook» на экране Visual Basic, а затем запустите его (зеленый треугольник воспроизведения)

введите описание изображения здесь

Sub WalkThePlank()

    dim colorIndex as Integer
    colorIndex = 3                   'UPDATE ME TO YOUR COLOUR OR BE FED TO THE SHARKS   

    Dim rng As Range

    For Each rng In ActiveSheet.UsedRange.Cells

        Dim color As Long
        color = rng.Interior.ColorIndex
        If (color = colorIndex) Then   
            rng.Locked = True
        else
            rng.Locked = false    'this will remove any locks for those not in the given color
        End If

    Next rng

End Sub

В VBa нет возможности отмены, поэтому сначала сделайте копию файла (чтобы создать резервную копию)!

Цветовой индекс -http://dmcritchie.mvps.org/excel/colors.htm

Как добавить VBA в MS Office?

Вышеизложенное предполагает, что у вас нет объединенных ячеек и что ваш рабочий лист не защищен.

Если вы не уверены, какой colorIndex вам нужен, то сначала воспользуйтесь этим скриптом

Sub Find()

Dim colorIndexFinder As Integer
colorIndexFinder = Range("A1").Interior.colorIndex  'CHANGE A1 to the cell with the colour you want to use
MsgBox (colorIndexFinder)

End Sub

Редактировать

Вы упомянули, что используете объединенные ячейки.

Пожалуйста попробуйте

Sub WalkThePlank()

Dim colorIndex As Integer
colorIndex = 3                   'UPDATE ME TO YOUR COLOUR OR BE FED TO THE SHARKS

Dim rng As Range

For Each rng In ActiveSheet.UsedRange.Cells

    Dim color As Long
    color = rng.Interior.colorIndex

    If (color = colorIndex) Then
        If (rng.MergeCells) Then
            rng.MergeArea.Locked = True
        Else
            rng.Locked = True
        End If
    Else
        If (rng.MergeCells) Then
            rng.MergeArea.Locked = False
        Else
            rng.Locked = False
        End If
    End If

    Next rng

End Sub

решение2

я нашелэтотс помощью простого макроса:

Выделите весь лист (Ctrl+A)и разблокируйте все ячейки, а затем используйте этот макрос, чтобы снова заблокировать цветные ячейки:

Dim c As Object 
For Each c In selection 
    If c.ColorIndex = 6 ' 6 is for Yellow - change to the colour you want
    c.Locked = True 
End If 
Next c 

решение3

Решение VBA (Как добавить VBA в MS Office?)

Sub LockOnlyCellsWithCertainColor()
    'Change to your color
    Const colorToLock = 65535

    Dim currentCell As Range

    ActiveSheet.Cells.Locked = False

    For Each currentCell In ActiveSheet.UsedRange.Cells
        If currentCell.Interior.Color = colorToLock Then
            If currentCell.MergeCells Then
                currentCell.MergeArea.Locked = True
            Else
                currentCell.Locked = True
            End If
        End If
    Next

End Sub

Sub GetBackgroundColorOfActiveCell()
    Debug.Print ActiveCell.Interior.Color
    MsgBox ActiveCell.Interior.Color
End Sub

решение4

Следующий способ мне подходит, если сначала снять защиту листа и установить индекс цвета на 6 для желтого цвета.

Sub Lock_by_Color()
Dim colorIndex As Integer
Dim Range As Range

colorIndex = 6
For Each Range In ActiveSheet.UsedRange.Cells
Dim color As Long
 color = Range.Interior.colorIndex
If (color = colorIndex) Then
 Range.Locked = True
Else
 Range.Locked = False
End If
Next Range

ActiveSheet.Protect , DrawingObjects:=True, Contents:=True, Scenarios:=True _
, AllowSorting:=True, AllowFiltering:=True, AllowUsingPivotTables:=True
ActiveSheet.EnableSelection = xlNoRestrictions
End Sub

Связанный контент