[英]Loop through cells in a range and lock cells based on their value
好吧,我有一系列来自A1:B10的单元格。 A1到A10范围内的单元格包含一个带有2个选项(锁定,dont_lock)的下拉列表。 B1到B10范围内的单元格是空单元格,允许用户输入数据。 我想做的是基于相邻单元格中的值锁定单个单元格。 因此,如果单元格A1设置为“锁定”,那么我将锁定单元格B1。 如果单元格A2设置为“ dont_lock”,则B2未锁定,依此类推。 我尝试使用下面的代码中显示的for循环,但是它不起作用。 有人可以帮忙吗?
Dim rCell As Range
Dim rRng As Range
Set rRng = Sheet1.Range("A1:B10")
For Each rCell In rRng.Cells
If rCell = "Lock" Then
Range("B1").Locked = True
End If
Next rCell
在Excel中,默认情况下单元格是锁定的。 如果要解锁单元,则必须实际指定该行为。 但是,如果当前未保护工作表,则是否锁定单元格都没有关系。 因此,如果要锁定行为,请确保调用Sheet1.Protect
。
现在,如果我正确理解了您的解释,那么使用以下方法会更好:
Dim rCell As Range
Dim rRng As Range
Set rRng = Sheet1.Range("A1:A10") 'Exclude B as you are only checking A.
Sheet1.Unprotect
For Each rCell In rRng.Cells
'Avoid if else structure since locking depends on result of evaluation only.
rcell.Offset(0,1).locked = rcell.Value = "Lock"
Next rCell
Sheet1.Protect
请尝试以下代码。 您的代码唯一的问题是缺少rCell.value =“ Lock”。 您只为所有单元锁定单元格B1,没有锁定相邻的所有单元格:)
Option Explicit
Sub lockNextCell()
Dim wkSheet As Worksheet
Dim rng As Range, rCell As Range
Set wkSheet = Sheets("Sheets1") '-- use your own sheet
Set rng = wkSheet.Range("A3:A12") '-- use your own range
For Each rCell In rng
If rCell.Offset(0, 0).Value = "Lock" Then
rCell.Offset(0, 1).Locked = True '-- here we are locking the adjacent cell
else
rCell.Offset(0, 1).Locked = False
End If
Next rCell
End Sub
丹尼尔(Daniel)谈到保护床单时,只需要注意:
这是MSDN的参考 :“如果锁定单元格并保护工作表,则不能在单元格中键入数据,修改单元格中当前的数据或更改单元格的其他属性(例如,单元格格式)”
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.