locking/解锁variables单元格

我的Excel VBA解锁所需的单元格,但不能在条件更改时重新locking。

在我的Excel工具中,如果A1的值为“A”,那么它将在A8:A13范围内findB1,并解锁行值为B1,列值为“b”,列值为“c”的行在这里单元格B9和C9被解锁)。 我的VBA在这里工作,但是当我改变B1的值(例如“w”到“e”)时,它再次解锁相应的单元,例如单元B10和C10,但是它不重新locking早先解锁的单元,即单元B9和C9, 。

Excel实用程序

Private Sub Worksheet_SelectionChange(ByVal Target As Range) If [A1] = "A" Then ActiveSheet.Unprotect ("") [=INDEX(A8:F13,MATCH(B1,A8:A13,0),MATCH("b",A8:F8,0))].Locked = False [=INDEX(A8:F13,MATCH(B1,A8:A13,0),MATCH("c",A8:F8,0))].Locked = False ActiveSheet.Protect ("") Else ActiveSheet.Unprotect ("") [=INDEX(A8:F13,MATCH(B1,A8:A13,0),MATCH("b",A8:F8,0))].Locked = True [=INDEX(A8:F13,MATCH(B1,A8:A13,0),MATCH("c",A8:F8,0))].Locked = True ActiveSheet.Protect ("") End If End Sub 

将代码更改为:

 Private Sub Worksheet_Change(ByVal Target As Range) If [A1] = "A" Then Unprotect "" Range("B9:F13").Locked = True '<--|| set all range "locked" [=INDEX(A8:F13,MATCH(B1,A8:A13,0),MATCH("b",A8:F8,0))].Locked = False '<--| unlock wanted cell [=INDEX(A8:F13,MATCH(B1,A8:A13,0),MATCH("c",A8:F8,0))].Locked = False '<--| unlock wanted cell Protect "" End If End Sub