Excel能判断后自动选择性锁定部分单元格么?
excel吧
全部回复
仅看楼主
level 3
我想实现一个功能,就是根据前面某个单元格值的不同,可以让后面的一些单元格可以编辑或者不可编辑
譬如:A1=是,A2到A5可以编辑
A1=否,A2到A5不可以编辑
在网上看了是用VBA实现 能有大佬教一下吗??
2019年09月09日 11点09分 1
level 3
求不沉!
2019年09月09日 12点09分 2
level 3
求不沉!
2019年09月09日 12点09分 4
level 3
求不沉 哭了
2019年09月10日 00点09分 5
level 11
首先把工作表全选,然后设置单元格格式,把锁定单元格框的勾去掉,然后选择a2到a5单元格,设置单元格格式把锁定单元格勾选然后运行代码
Private Sub Worksheet_Change(ByVal Target As Range)
Dim rng As Range
If [a1] = "否" Then
ActiveSheet.Protect
ElseIf [a1] = "是" Then
ActiveSheet.Unprotect
End If
End Sub
2019年09月10日 01点09分 6
谢谢谢谢 我等下试下
2019年09月10日 01点09分
你好 那我要是 就是说 多个怎么实现 譬如一个单元格的选择是否可以控制一行 那我分开很多行怎么设置
2019年09月10日 06点09分
A1=是,A2到A5可以编辑 A1=否,A2到A5不可以编辑 B1=是,B2到B5可以编辑 B1=否,B2到B5不可以编辑 等等这样的同时满足是怎么样的
2019年09月10日 06点09分
level 11
Private Sub Worksheet_Change(ByVal Target As Range)
Cells.Select
If Selection.Locked = True Then
Selection.Locked = False
End If
If [a1] = "否" Then
Range("a2:a5").Select
If Selection.Locked = False Then
Selection.Locked = True
End If
ActiveSheet.Protect
ElseIf [b1] = "否" Then
Range("b2:b5").Select
If Selection.Locked = False Then
Selection.Locked = True
End If
ActiveSheet.Protect
Else
ActiveSheet.Unprotect
End If
End Sub
2019年09月10日 07点09分 9
好像不太对 我想要的是每一列都是单独的 控制是否能编辑
2019年09月10日 07点09分
@君为红颜醉丶66 是单独的
2019年09月10日 07点09分
level 3
你看我B1是否还是可以编辑 @qianboccp
2019年09月10日 08点09分 10
level 11
Private Sub Worksheet_Change(ByVal Target As Range)
If [a1] = "否" And [b1] <> "否" Then
ActiveSheet.Unprotect
Cells.Select
Selection.Locked = False
Range("a2:a5").Select
Selection.Locked = True
ActiveSheet.Protect
ElseIf [b1] = "否" And [a1] <> "否" Then
ActiveSheet.Unprotect
Cells.Select
Selection.Locked = False
Range("b2:b5").Select
Selection.Locked = True
ActiveSheet.Protect
ElseIf [b1] = "否" And [a1] = "否" Then
ActiveSheet.Unprotect
Cells.Select
Selection.Locked = False
Range("a2:b5").Select
Selection.Locked = True
ActiveSheet.Protect
Else
ActiveSheet.Unprotect
End If
End Sub
2019年09月10日 08点09分 11
现在好像是可以了 那我要接着加C D E.....那岂不是这个代码会很长吗
2019年09月10日 08点09分
@君为红颜醉丶66 不会,如果多的话,加循环
2019年09月10日 08点09分
level 3
Private Sub Worksheet_Change(ByVal Target As Range)
If [l1] = "否" And [l2] <> "否" And [l3] <> "否"Then
ActiveSheet.Unprotect
Cells.Select
Selection.Locked = False
Range("a1:k1").Select
Selection.Locked = True
ActiveSheet.Protect
ElseIf [l2] = "否" And [l1] <> "否" And [l3] <> "否"Then
ActiveSheet.Unprotect
Cells.Select
Selection.Locked = False
Range("a2:k2").Select
Selection.Locked = True
ActiveSheet.Protect
ElseIf [l3] = "否" And [l1] <> "否" And [l2] <> "否"Then
ActiveSheet.Unprotect
Cells.Select
Selection.Locked = False
Range("a3:k3").Select
Selection.Locked = True
ActiveSheet.Protect
ElseIf [l1] = "否" And [l2] = "否" And [l3] = "否"Then
ActiveSheet.Unprotect
Cells.Select
Selection.Locked = False
Range("a1:k3").Select
Selection.Locked = True
ActiveSheet.Protect
Else
ActiveSheet.Unprotect
End If
End Sub
@qianboccp 我这边改成行了 然后写了三个。。。。怎么说呢这个要是有20 多行我就不行了
2019年09月10日 09点09分 13
答案在14楼
2019年09月10日 09点09分
level 11
多了要用循环的
这个是第一列随意多少都可以
Private Sub Worksheet_Change(ByVal Target As Range)
Dim i, t As Integer, arr()
i = Range("IV1").End(xlToLeft).Column
j = 1
For t = 1 To i
If Cells(1, t) = "否" Then
ReDim Preserve arr(j)
arr(j) = t
j = j + 1
End If
Next
If j = 1 Then
GoTo 100
End If
ActiveSheet.Unprotect
Cells.Select
Selection.Locked = False
For a = 1 To UBound(arr)
Range(Cells(2, arr(a)), Cells(5, arr(a))).Select
Selection.Locked = True
Next
ActiveSheet.Protect
100:
Exit Sub
End Sub
2019年09月10日 09点09分 14
好的 我看下 麻烦了
2019年09月10日 09点09分
level 3
我这个循环语句不太看的懂 就按我的那个13楼的写法应该怎么写?@qianboccp
2019年09月11日 05点09分 15
哎 救救孩子
2019年09月11日 05点09分
level 3
Private Sub Worksheet_Change(ByVal Target As Range)
Dim i, t As Integer, arr()
i = Range("IV1").End(xlToLeft).Column
j = 1
For t = 1 To i
If Cells(t, 8) = "否" Then
ReDim Preserve arr(j)
arr(j) = t
j = j + 1
End If
Next
If j = 1 Then
GoTo 100
End If
ActiveSheet.Unprotect
Cells.Select
Selection.Locked = False
For a = 1 To UBound(arr)
Range(Cells(arr(a), 1), Cells(arr(a), 5)).Select
Selection.Locked = True
Next
ActiveSheet.Protect
100:
Exit Sub
End Sub
@qianboccp这样应该对的吧
2019年09月11日 06点09分 16
level 3
还有就是我这边要满足 否或者是不行这两个结果 会导致不能编辑要加什么 or?
2019年09月11日 06点09分 17
level 3
我知道了 我要的是 如果输入完成就可以编辑 输入其他的都不可以更新 @qianboccp
2019年09月11日 06点09分 18
要解释起来会很多,不过原理很简单。你要是明白了就知道怎么改了。VBA太具有针对性了。
2019年09月11日 07点09分
@qianboccp 我现在就想知道我17楼的结果 就是这个或者关系怎么加
2019年09月11日 07点09分
@qianboccp 好像可以了
2019年09月11日 07点09分
level 3
Private Sub Worksheet_Change(ByVal Target As Range)
Dim i, t As Integer, arr()
i = Range("IV1").End(xlToLeft).Column
j = 1
For t = 1 To i
If Cells(t, 39) = "待更新" Or Cells(t, 39) = "NG" Then
ReDim Preserve arr(j)
arr(j) = t
j = j + 1
End If
Next
If j = 1 Then
GoTo 100
End If
ActiveSheet.Unprotect
Cells.Select
Selection.Locked = False
For a = 1 To UBound(arr)
Range(Cells(arr(a), 1), Cells(arr(a), 38)).Select
Selection.Locked = True
Next
ActiveSheet.Protect
100:
Exit Sub
End Sub
2019年09月11日 07点09分 19
感觉你是倒过来了,你是以行为标准
2019年09月11日 07点09分
@qianboccp 还是不对 我第一次把一行改成完成这样是可以编辑的 然后我改成NG或者待更新 再改成完成就不能编辑了
2019年09月11日 07点09分
@君为红颜醉丶66 给你说了你不懂乱改是不行的
2019年09月11日 07点09分
@qianboccp 那你帮一下嘛 哈哈哈哈 [哈哈]
2019年09月11日 07点09分
1 2 尾页