【发布时间】:2020-03-09 15:28:57
【问题描述】:
我对 VBA 非常陌生,但我会尽力赶上,阅读我能阅读的所有内容,并尽可能多地进行测试。经过几天的尝试,我根本无法弄清楚这一点,我请求帮助!
我特别需要的: 如果在单元格 U13 中输入值 9(并且只有 9),则单元格 AZ13 被解锁(没有其他输入值将解锁 AZ13)。或者,如果在单元格 U14 中输入值 9,则单元格 AZ14 被解锁,依此类推,直到大约 U300/AZ300。
我已经使用下面的代码在第一行 U13/AZ13 上成功实现了预期的结果。
Private Sub Worksheet_Change(ByVal Target As Range)
ActiveSheet.Unprotect "password"
If Range("U13").Value <> 9 Then
Range("AZ13").Locked = True
ElseIf Range("U13").Value = 9 Then
Range("AZ13").Locked = False
End If
ActiveSheet.Protect "password"
End Sub
我这辈子无法上班的部分是转移到下一行。我已经尝试了上述代码的几种变体以及大约 100 种其他代码,包括:
Private Sub Worksheet_Change(ByVal Target As Range)
ActiveSheet.Unprotect "password"
If Range("U13:U200").Value <> 9 Then
Range("U13:U200").Offset(0, 31).Select.Locked = True
ElseIf Range("U13:U200").Value = 9 Then
Range("U13:U200").Offset(0, 31).Select.Locked = False
End If
ActiveSheet.Protect "password"
End Sub
我已经用“.select.locked”以及“.locked”尝试了上述方法。 我只是在学习使用范围偏移,但确实尝试修改为仅在 (0,1) 上移动 1 个单元格,以防万一我计算了错误的单元格数量,但这也不起作用。这个特定的代码给了我一个运行时错误(类型不匹配); debug 指向这一行:
If Range("U13:U200").Value <> 9 Then
非常感谢任何在正确方向上的帮助!!!
凯
【问题讨论】:
-
您将需要循环范围,您将无法将值数组与单个值进行比较。
-
您会收到类型不匹配错误,因为您无法将整个范围与
9进行比较。你需要遍历它。 -
第二个例子中你到底想做什么?
-
我只想获取第一个示例(适用于该特定行),对工作表中的所有其他行执行相同操作。我目前正在查找如何根据前两个 cmets 正确循环,因为这似乎是我的问题。
-
你们谁能告诉我 - 我需要将循环添加到第一个示例(适用于一行的那个),还是第二个示例中缺少的东西?