试图限制用户从具有数据验证列表的3列中选择任何内容
目标范围:(三列L:N),即L3,M3,N3,直至L40,M40,N40。
除非用户首先填充列U中的字段
目标范围: U3-U40
我已经尝试搜索如何锁定单元格选择,除非在过去几天中选择了相应的单元格,但没有结果。考虑到这个问题,是因为目标单元格实际上没有输入一个值,而是使用了一个来自条件格式的列表。
编辑:我不确定我是否说清楚了,但是每一行都应该独立地工作,比如想要锁定L3、M3和N3,除非U3被填充,否则L4、M4和N4也是这样,除非U4是填充的。等
谢谢!安德鲁。
发布于 2020-03-20 02:04:44
在您希望保护的工作表的代码模块中,请输入以下内容.
Private Sub Worksheet_Activate()
Shield
End Sub
Private Sub Worksheet_Change(ByVal Target As Range)
Shield
If Len(Me.[u5]) Then Me.Unprotect '<-- change 'u5' to the cell in column U that unlocks
End Sub
Sub Shield()
With Me
.Unprotect
.Cells.Locked = False
.[L3:n40].Locked = True
.Protect , 0, 1, 1, 1, 1, 1, 1, 1, 1, 1
End With
End Sub更新
上面的代码可以工作,只键掉一个单元格U5来控制整个范围的L3:N40是否被锁定。
现在我理解了,您希望根据同一行范围L3:N40是否有一个值而独立地锁定/解锁每一行U3:U40。
以下代码适用于此新场景.
Private Sub Worksheet_Activate()
Shield
End Sub
Private Sub Worksheet_Change(ByVal Target As Range)
Shield
End Sub
Sub Shield()
Dim c
With Me
.Unprotect
.Cells.Locked = False
For Each c In .[u3:u40]
If Len(c) = 0 Then c.Offset(, -9).Resize(, 3).Locked = True
Next
.Protect , 0, 1, 1, 1, 1, 1, 1, 1, 1, 1
End With
End Subhttps://stackoverflow.com/questions/60767311
复制相似问题