循环遍历范围中的单元格并根据其值锁定单元格

时间:2012-12-18 15:47:30

标签: vba excel-vba excel

好吧说我有一系列来自A1:B10的细胞。 A1到A10范围内的单元格包含一个带有2个选项的下拉列表(lock,dont_lock)。 B1到B10范围内的单元格是空单元格,允许用户输入数据。我想要做的是根据相邻单元格中的值锁定单个单元格。因此,如果单元格A1设置为“锁定”,则我锁定单元格B1。 IF单元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

2 个答案:

答案 0 :(得分:4)

在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

答案 1 :(得分:1)

尝试以下代码。只有您的代码问题是缺少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

丹尼尔谈到保护表时只是注意事项:

这是reference from MSDN: “如果您锁定单元格并保护工作表,则无法在单元格中键入数据,修改单元格中当前的数据或更改单元格的其他属性(例如单元格格式化)”