我的 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
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句