繁体   English   中英

遍历范围内的单元格并根据其值锁定单元格

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM