0

好的,说我有一系列来自 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
4

2 回答 2

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
于 2012-12-18T16:02:20.183 回答
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

只是丹尼尔谈到保护表时的一个注释:

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

于 2012-12-18T15:58:41.113 回答