锁定/解锁可变单元

时间:2017-02-25 11:14:57

标签: excel vba

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

在我的Excel实用程序中,如果A1具有值" A",则它将在A8:A13范围内找到B1并解锁具有值B1的行和具有值&#34的列的单元格; 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 个答案:

答案 0 :(得分: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