我的Excel VBA会解锁所需的单元格,但在条件更改时无法重新锁定。
在我的Excel实用程序中,如果A1具有值" A",则它将在A8:A13范围内找到B1并解锁具有值B1的行和具有值&#34的列的单元格; b"和列具有值" c" (这里单元格B9和C9要解锁)。我的VBA在这里工作但是当我改变B1的值时(例如" w"到" e"它再次解锁相应的细胞,例如细胞B10和C10,但它不会重新锁定细胞解锁早些时候,即细胞B9和C9。它们仍未解锁。
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
答案 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