|
楼主 |
发表于 2024-7-3 09:43
|
显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用 · 内置多项VBA编程加强工具 ★ 免费下载 ★ ★ 使用手册★
哦哦 您这个就是以F列为基准,最终根据F列的情况来确定是锁定还是不锁定!
而我的期望 正好和您相反,最终根据BF(BE)列状态为基准,来决定锁定还是不锁定,F列只是一个前提判断条件。 根据您的指点我自己随便改了一个,先说明我不懂VBA,仅仅是根据您的讲解和自己的理解瞎改的。 只是运行时出了错误,不知道是那里有问题。若老师不忙的情况下请指点。
更改依据:
前提 1: BF列状态是与BE列绑定的,BE列下拉菜单 "完成" "未完成" "停止",BF列自动跟随BE列对应变更为"已完成" "未完成" "已停止"。
前提 2: F列数据空时,或者BE列<>"完成"or"停止"时,所有单元格保持之前的状态(原锁定的还锁定,为锁定仍为锁定)
前提 3 : F列<> "" and BE列="完成"or"停止"时,A:BF列相应单元格进行锁定。
锁定与未锁定,最终还是要根据BE列的 更改状态来决定,F列仅是前提条件,填写后基本上是不会更改的。
Private Sub Worksheet_Change(ByVal Target As Range)
Dim rng As Range
'Dim x, y As String
ActiveSheet.Unprotect
Cells.Locked = False
'x = ChrW(24050) & ChrW(20572) & ChrW(27490) ' stop
'y = ChrW(24050) & ChrW(23436) & ChrW(25104) 'complete
For Each rng In Target
If rng.Column = 57 And rng.Row > 2 Then '根据BE列的"完成" "未完成" "停止"来决定BF列显示"已完成" "未完成" "已停止"状态
If rng.Value = "完成" Or rng.Value = "停止" And rng.Offset(51, 0).Value <> "" Then '当BE列="完成" 或者 "停止",并且F列不为空时
rng.Offset(-57, 0).Resize(1, 58).Locked = True 'A列-BF列锁定单元格
End If 'BE列<> "完成" or "停止"or F列<>""时,单元格锁定状态不做改变,保持原来的状态
End If
Next
ActiveSheet.Protect DrawingObjects:=True, Contents:=True, Scenarios:=True
Protect "123" '恢复保护
End Sub
|
|