Excel - Bloquear células com base na cor?

3

Eu tenho esta folha de excel onde eu quero proteger algumas células de formatar e editar. Todas essas células são coloridas com uma cor específica.

A planilha é muito grande e, portanto, eu estou procurando uma maneira de bloquear todas essas células de uma vez e, em seguida, ser capaz de formatar em massa todas as outras células sem alterar as células que eu quero bloquear.

Existe alguma maneira de dizer ao Excel para bloquear células com uma cor específica?

    
por Behedwin 02.06.2015 / 08:27

4 respostas

5

Sim, com o VBa ... Simplesmente copie isso para o "ThisWorkbook" na tela do Visual Basic e então execute-o (triângulo verde)

SubWalkThePlank()dimcolorIndexasIntegercolorIndex=3'UPDATEMETOYOURCOLOURORBEFEDTOTHESHARKSDimrngAsRangeForEachrngInActiveSheet.UsedRange.CellsDimcolorAsLongcolor=rng.Interior.ColorIndexIf(color=colorIndex)Thenrng.Locked=Trueelserng.Locked=false'thiswillremoveanylocksforthosenotinthegivencolorEndIfNextrngEndSub

NãohácomodesfazernoVBa,entãocopieprimeirooseuarquivo(paracriarumbackup)!

Índicedecores- link

Como eu adiciono o VBA no MS Office?

O texto acima assume que você não tem células mescladas e que sua planilha não está protegida.

Se você não tiver certeza do que é o colorIndex, use este script primeiro

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

Editar

Você mencionou que usa células mescladas

Por favor, tente

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
    
por 02.06.2015 / 09:34
2

Encontrei este caminho usando uma macro simples:

Selecione a folha inteira (Ctrl+A) e desbloqueie todas as células e, em seguida, use essa macro para definir as coloridas para serem bloqueadas novamente:

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 
    
por 02.06.2015 / 09:31
1

Solução Vba ( Como eu adiciono o VBA no 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
    
por 02.06.2015 / 12:12
0

O abaixo funciona para mim desde que você desproteja a folha primeiro, o índice de cores está definido como 6 para amarelo.

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
    
por 24.05.2018 / 18:04