2017-02-25 148 views
0

我的Excel VBA解锁所需的单元格,但在条件更改时无法重新锁定。锁定/解锁变量单元格

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

Excel utility

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 

回答

1

改变代码如下:

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