Wie @ForwardEd hervorgehoben hat, erfordert dies einige VBA. Der folgende Code wird ausgelöst, wenn in Ihrer Liste eindeutiger IDs etwas geändert wird, und überprüfen Sie, ob der alte Wert in der anderen Liste (Ihrem zweiten Blatt) vorhanden war. Wenn es existiert, wird die Änderung rückgängig gemacht.
Private Sub Worksheet_Change(ByVal Target As Range) Dim vOld As Variant Dim vNew As Variant If Not Intersect([ProductListItemID], Target) Is Nothing Then vNew = Target.Value Application.EnableEvents = False Application.Undo vOld = Target.Value If WorksheetFunction.CountIf([OrdersItemID], Target) > 0 Then MsgBox "Change disallowed" Else Target.Value = vNew 'MsgBox "Change OK" End If Application.EnableEvents = True End If End Sub
Dies sollte im Code für Sheet1 stehen. Ich gehe von zwei benannten Bereichen aus:
ProductListItemID (List of items on Sheet1 to be protected) OrdersItemID (List of ItemID's in 2nd sheet)
Ich habe beide Bereiche auf einem Blatt zusammengefasst:
Erläuterung: Wenn in Sheet1 eine Änderung vorgenommen wird, prüft das Makro, ob es sich im Bereich ProductListItemID befindet. Wenn ja, nimmt es den geänderten Wert (vNew), macht ein Rückgängigmachen und den vorherigen Wert (vOld). Anschließend wird geprüft, ob der vOld-Wert im OrdersItemID-Bereich vorhanden ist. Wenn dies der Fall war, bleibt die Zelle auf dem alten Wert, andernfalls wird der neue Wert wiederhergestellt.