[英]Lock/unlock a variable cell(s)
My Excel VBA会解锁所需的单元格,但在条件更改时无法重新锁定。
在我的Excel实用程序中,如果A1的值为“ A”,则它将在范围A8:A13中找到B1并解锁具有值B1的行和具有值“ 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
将代码更改为此:
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
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.