Excel – Zellen basierend auf Farbe sperren?

Excel – Zellen basierend auf Farbe sperren?

Ich habe dieses Excel-Blatt, in dem ich einige Zellen vor Formatierung und Bearbeitung schützen möchte. Alle diese Zellen sind mit einer bestimmten Farbe eingefärbt.

Das Blatt ist sehr groß und deshalb suche ich nach einer Möglichkeit, alle diese Zellen auf einmal zu sperren und dann alle anderen Zellen massenhaft zu formatieren, ohne die Zellen zu ändern, die ich sperren möchte.

Gibt es eine Möglichkeit, Excel anzuweisen, Zellen mit einer bestimmten Farbe zu sperren?

Antwort1

Ja, mit VBa... Einfach das in das "ThisWorkbook" im Visual Basic Screen kopieren und dann ausführen (grünes Play-Dreieck)

Bildbeschreibung hier eingeben

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

In VBa gibt es keine Rückgängig-Funktion. Machen Sie also zuerst eine Kopie Ihrer Datei (um eine Sicherungskopie zu erstellen)!

Farbindex -http://dmcritchie.mvps.org/excel/colors.htm

Wie füge ich VBA in MS Office hinzu?

Das Obige setzt voraus, dass Sie keine verbundenen Zellen haben und dass Ihr Arbeitsblatt nicht geschützt ist.

Wenn Sie nicht sicher sind, welchen Farbindex Sie benötigen, verwenden Sie zunächst dieses Skript

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

Bearbeiten

Sie haben erwähnt, dass Sie zusammengeführte Zellen verwenden

Bitte versuche

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

Antwort2

ich habe gefundenDasmithilfe eines einfachen Makros:

Markieren Sie das gesamte Blatt (Ctrl+A)und entsperren Sie alle Zellen. Verwenden Sie anschließend dieses Makro, um die farbigen Zellen wieder zu sperren:

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 

Antwort3

VBA-Lösung (Wie füge ich VBA in MS Office hinzu?)

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

Antwort4

Das Folgende funktioniert bei mir, solange Sie zuerst den Blattschutz aufheben. Der Farbindex ist auf 6 für Gelb eingestellt.

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

verwandte Informationen