在一个范围内的特定单元格中输入条件值,解锁另一个范围内的另一个特定单元格(VBA,范围偏移)
Conditional value entered in specific cell in a range, unlocks another specific cell in another range (VBA, Range Offset)
我对 VBA 非常陌生,但我会尽我最大的努力赶上进度,尽我所能阅读所有内容,并尽可能多地进行测试。经过几天的尝试,我根本无法解决这个问题,我请求帮助!
我特别需要的是:
如果在单元格 U13 中输入值 9(且仅输入 9),则单元格 AZ13 将解锁(输入任何其他值都不会解锁 AZ13)。或者,如果在单元格 U14 中输入值 9,则单元格 AZ14 将解锁,依此类推 sheet 到大约 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”尝试了上面的方法。
我只是在学习使用范围偏移,但确实尝试修改为仅将 1 个单元格移动到 (0,1) 上,以防万一我计算了错误的单元格数量,但这也不起作用。这个特定的代码给了我一个 运行 时间错误(类型不匹配);调试指向这一行:
If Range("U13:U200").Value <> 9 Then
非常感谢任何正确方向的帮助!!!
凯
如上所说,需要循环
像这样:
Private Sub Worksheet_Change(ByVal Target As Range)
Dim c As Range
ActiveSheet.Unprotect "password"
For Each c In Me.Range("U13:U200").Cells
c.Offset(0, 31).Locked = c.Value <> 9
Next c
ActiveSheet.Protect "password"
End Sub
我对 VBA 非常陌生,但我会尽我最大的努力赶上进度,尽我所能阅读所有内容,并尽可能多地进行测试。经过几天的尝试,我根本无法解决这个问题,我请求帮助!
我特别需要的是: 如果在单元格 U13 中输入值 9(且仅输入 9),则单元格 AZ13 将解锁(输入任何其他值都不会解锁 AZ13)。或者,如果在单元格 U14 中输入值 9,则单元格 AZ14 将解锁,依此类推 sheet 到大约 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”尝试了上面的方法。 我只是在学习使用范围偏移,但确实尝试修改为仅将 1 个单元格移动到 (0,1) 上,以防万一我计算了错误的单元格数量,但这也不起作用。这个特定的代码给了我一个 运行 时间错误(类型不匹配);调试指向这一行:
If Range("U13:U200").Value <> 9 Then
非常感谢任何正确方向的帮助!!!
凯
如上所说,需要循环
像这样:
Private Sub Worksheet_Change(ByVal Target As Range)
Dim c As Range
ActiveSheet.Unprotect "password"
For Each c In Me.Range("U13:U200").Cells
c.Offset(0, 31).Locked = c.Value <> 9
Next c
ActiveSheet.Protect "password"
End Sub